Как получить идентификатор Android для элемента меню в Android?
Есть ли способ получить идентификатор Android для элемента меню? Я вижу getTitle(), но не getId(). Меня интересует значение идентификатора "menu_printer_settings", а не значение title "printer_settings" и идентификатор элемента меню (getItemId()). Мне нужен этот идентификатор, чтобы мои скрипты Monkey Talk работали и с локализованными сборками.
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<item
android:id="@+id/menu_printer_settings"
android:title="@string/printer_settings"
/>
Ответы
Ответ 1
Решил его, получив все поля для пакета
Map<Integer, String> idMap = new HashMap<Integer, String>();
Class<?> r;
String rClass = activity.getBaseContext().getApplicationContext().getPackageName()
+ ".R$id";
try {
r = Class.forName(rClass);
} catch (ClassNotFoundException e1) {
Log.log("Unable to load " + rClass + ": " + e1.getMessage());
return idMap;
}
for (Field f : r.getFields()) {
int val;
try {
val = f.getInt(null);
} catch (Exception e) {
throw new IllegalStateException("Unable to get value for " + f.getName() + ": "
+ e.getMessage());
}
idMap.put(val, f.getName());
}
Ответ 2
Solution1:
MenuItem item
String[] id = getResources().getResourceName(item.getItemId()).split("\\/");
затем введите id [1]
Solution2:
Использовать titleCondensed для соответствия идентификатору, например.
<menu>
<item android:id="@+id/myid"
android:title="some menu title"
android:titleCondensed="myid"/>
...
</menu>
затем
String selectedMenuIdString = (String) item.getTitleCondensed();
Я предпочитаю решение 1, так как мне не нужно повторять имя идентификатора.
Надеюсь, это поможет.
С уважением
Стив
Ответ 3
Попробуйте следующее:
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.menu_printer_settings:
//do what you want
break;
}
}
Ответ 4
Попробуйте использовать getItemID() также, если у вас все еще есть проблемы:
MenuItem.getItemId возвращает 0 вместо ItemId