Более простой способ получить идентификатор (строку) представления по его идентификатору (int)

Я новичок в android и java, поэтому извините, если это слишком простой вопрос, но я попытался найти решение на форумах и Google, и я не смог.

У меня есть 24 кнопки в моем макете, все эти кнопки делают что-то подобное, поэтому я хочу создать общую функцию. Но сначала мне нужно знать имя (xml id) его кнопки.

Этот XML-код кнопки:

<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" /> 

Я установил android: onClick = "onClick" для всех кнопок.

В моей деятельности я создал новую функцию onClick:

Этот код, который я пробовал:

 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()); } 

Но когда я пытаюсь получить имя (в данном случае «add_04»), я всегда получаю «ложь».

Наконец, я нашел решение со следующим кодом:

 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(); } } 

Мой вопрос: если нет более простого способа получить этот идентификатор?

Заранее спасибо.

Solutions Collecting From Web of "Более простой способ получить идентификатор (строку) представления по его идентификатору (int)"

С самого начала этот подход ошибочен. Если вы хотите связать кусок произвольных данных (например, строку) с представлением, для этого используется tag . Идентификатор является числовым, и лучше оставаться таким.

как это:

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

Я использую это в конструкторах вида для создания более значимых TAG

Вы можете проверить идентификатор каждой кнопки таким образом:

 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; } } 

Редактировать:

Вы должны использовать

getResources().getResourceEntryName(int resid);

Если вы хотите получить имя записи, связанное с resId

или

Вы можете использовать getIdentifier() для извлечения идентификатора ресурса для данного имени ресурса.

Например:

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

Вы можете поместить это toString () в Android-представление, оно вернет идентификатор ресурса String.

 @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; } 

Попробуйте метод ниже, чтобы получить идентификатор вида.

 @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; }