Android: ImageView getID (); возвращаемое целое число - PullRequest
15 голосов
/ 13 октября 2010

Я настроил класс 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. Дайте мне знать, если вы, ребята, можете мне помочь.

Ответы [ 7 ]

18 голосов
/ 11 июля 2013

Редактировать - TL; DR:

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

Оригинал:

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

Я заметил, что когда вы печатаете View (неявно вызывая toString ()), напечатанные данные содержат строку ID, используемую в файлах макета (ту, которую вы хотите) вместо целого числа, возвращаемого getId (). Поэтому я посмотрел на исходный код toString () View, чтобы увидеть, как 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.

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

18 голосов
/ 13 октября 2010

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

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

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

}
15 голосов
/ 11 сентября 2012

Xml

android:tag="buttonA"

Src

Button.getTag().toString();
3 голосов
/ 19 декабря 2013

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

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

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

2 голосов
/ 01 марта 2013

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

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

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

0 голосов
/ 29 марта 2012

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

android:hint="buttonName"

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

String hint = ((Button)v).getHint().toString(); //v is the view passed onClick
0 голосов
/ 23 декабря 2010

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

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