Редактировать - 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
.
Надеюсь, это поможет!