Android: ImageView getID(); возвращаемое целое число

Я установил класс onTouch, чтобы определить, когда нажата одна из моих 40 кнопок.

Проблема, с которой я сталкиваюсь, - это определение того, какая кнопка была нажата.

Если я использую:

int ID = iv.getId();

Когда я нажимаю кнопку "widgetA1"

Получаю следующий идентификатор:

2131099684

Мне бы хотелось, чтобы он возвращал идентификатор строки "widgetA1"

от: game.xml

<ImageView android:layout_margin="1dip" android:id="@+id/widgetA1" android:src="@drawable/image" android:layout_width="wrap_content" android:layout_height="wrap_content"></ImageView>

от: game.java

public boolean onTouch(View v, MotionEvent event) {
  ImageView iv = (ImageView)v;
  int ID = iv.getId();
  String strID = new Integer(ID).toString();
  Log.d(TAG,strID);

  //.... etc

 }

+ - + - + - + - + - + -

Я другой мудрый прекрасно работает, он знает, какую кнопку вы нажимаете. Я совершенно новый для этого Android JAVA. Дайте мне знать, если вы, ребята, можете мне помочь.

Ответы

Ответ 1

Вы не можете получить эту строку widgetA1... Вы всегда получите целое число. Но это целое является уникальным для этого элемента управления.

чтобы вы могли это сделать, чтобы проверить, какая кнопка нажата

int ID = iv.getId();
if(ID == R.id.widgetA1) // your R file will have all your id in the literal form.
{

}

Ответ 2

Xml

android:tag="buttonA"

Src

Button.getTag().toString();

Ответ 3

Изменить - TL; DR:

View v; // handle to your view
String idString = v.getResources().getResourceEntryName(v.getId()); // widgetA1

Оригинал:

Я знаю, что прошло некоторое время с тех пор, как вы опубликовали, но я столкнулся с подобной проблемой, и я думаю, что нашел решение, посмотрев исходный код Android для класса View.

Я заметил, что когда вы печатаете View (неявно вызывающий toString()), напечатанные данные включают строку ID, используемую в файлах макета (тот, который вы хотите), вместо целого, возвращаемого getId(). Поэтому я посмотрел исходный код для представления toString(), чтобы узнать, как Android получает эту информацию, и на самом деле это не слишком сложно. Попробуйте следующее:

View v; // handle to your view
// -- get your View --
int id = v.getId();                       // get integer id of view
String idString = "no id";
if(id != View.NO_ID) {                    // make sure id is valid
    Resources res = v.getResources();     // get resources
    if(res != null)
        idString = res.getResourceEntryName(id); // get id string entry
}
// do whatever you want with the string. it will
// still be "no id" if something went wrong
Log.d("ID", idString);

В исходном коде Android также использует getResourcePackageName(id) и getResourceTypeName(id) для создания полной строки:

String idString = res.getResourcePackageName(id) + ":" + res.getResourceTypeName(id)
    + "/" + res.getResourceEntryName(id);

Это приводит к эффекту android:id/widgetA1.

Надеюсь, что это поможет!

Ответ 4

Конечно, вы можете получить widgetA1, просто выполните:

ImageView iv = (ImageView)v;
int id = iv.getId();
String idStr = getResources().getResourceName(id);

Он должен дать вам your.package.name:id/widgetA1, а затем сделать то, что вы хотите, с этой строкой.

Ответ 5

Мы получим значение Integer, соответствующее идентификатору views. Чтобы найти, на какую кнопку вы нажимаете, лучше использовать теги. вы можете установить тег в XML файле макета и сравнить, какой элемент вы нажали.

<Button 
        android:id="@+id/btnTest"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="Button"
        android:tag="btntestTag"/>

Это пример использования.

Ответ 6

Я думаю, что вы можете использовать это попробуйте

 ImageView imgView = new ImageView(this);
String imgName = "img"//in your case widgetA1
int id = getResources().getIdentifier(imgName, "drawable", getPackageName());

Ответ 7

Для реализации вы можете использовать атрибут подсказки для хранения имени кнопки, которое доступно. Например, в коде кнопки (.xml файл) используйте следующую строку:

android:hint="buttonName"

Затем в функции onClicked (.java файл) напишите следующее, чтобы получить подсказку:

String hint = ((Button)v).getHint().toString(); //v is the view passed onClick