Manera más fácil de obtener Id de la vista (cadena) por su Id (int)

Soy nuevo con android y java, lo siento si es una pregunta demasiado básica, pero he tratado de encontrar una solución en los foros y google y no pude.

Tengo 24 botones en mi diseño, todos estos botones hacen algo similar, así que quiero crear una función genérica. Pero primero necesito saber el nombre (xml id) del botón.

Este es el código XML del botón:

<Button android:id="@+id/add_04" android:layout_width="42dp" android:layout_height="wrap_content" android:layout_gravity="center" android:layout_marginLeft="15dp" android:background="@xml/zbuttonshape" android:onClick="onClick" android:text="@string/mas" /> 

He establecido android: onClick = "onClick" para todos los botones.

En mi actividad he creado una nueva función onClick:

Este es el código que he probado:

 public void onClick(View v) { String name = v.getContext().getString(v.getId()); String name2 = context.getString(v.getId()); String name3 = getString(v.getId()); String name4 = getResources().getString(v.getId()); } 

Pero cuando intento conseguir el nombre (en este caso "add_04") siempre consigo "falso".

Finalmente he encontrado una solución con el código siguiente:

 import java.lang.reflect.Field; String name5 = null; Field[] campos = R.id.class.getFields(); for(Field f:campos){ try{ if(v.getId()==f.getInt(null)){ name5 = f.getName(); break; } } catch(Exception e){ e.printStackTrace(); } } 

Mi pregunta es si no hay una manera más fácil de obtener este ID?

Gracias por adelantado.

El enfoque es equivocado para empezar. Si desea asociar un fragmento de datos arbitrarios (por ejemplo, una cadena) con una vista, para eso está la tag . La ID es numérica y es mejor que permanezca así.

Me gusta esto:

 View v; String IdAsString = v.getResources().getResourceName(v.getId()); 

Utilizo esto en constructores de la opinión para hacer TAGs más significativos

Puede comprobar id de cada botón de esta manera:

 public void onClick(View v) { switch (v.getId()) { case R.id.add_04: Toast.makeText(MainActivity.this, "1", Toast.LENGTH_LONG).show(); break; case R.id.add_05: Toast.makeText(MainActivity.this, "2", Toast.LENGTH_LONG).show(); break; } } 

Editar:

Tienes que usar

getResources().getResourceEntryName(int resid);

Si desea recuperar el nombre de entrada asociado a un resId

o

Puede utilizar getIdentifier() para devolver un identificador de recurso para el nombre de recurso dado.

Por ejemplo:

 int id = this.getResources().getIdentifier("yourtext", "string", this.getPackageName()); 

Puede poner este toString () dentro de una vista de Android, devolverá el ID de recurso de cadena.

 @Override public String toString() { Context context; Resources r = null; context = getContext(); if (context != null) { r = context.getResources(); } String entryName = null; if (r != null) entryName = r.getResourceEntryName(getId()); return entryName; } 

Pruebe el siguiente método para obtener la identificación de la vista.

 @Override public String toString() { Context context; Resources r = null; context = getContext(); if (context != null) { r = context.getResources(); } String entryName = null; if (r != null) entryName = r.getResourceEntryName(getId()); return entryName; } 
FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.