Intereting Posts
Пример использования AIDL Пользовательский шрифт дает неправильный символ для определенных комбинаций букв в Android Пользовательские разрешения Android – Marshmallow Использование MultiDexApplication приводит к тому, что тест Robolectric для класса приложения прерывается Не удалось создать представление: com.android.ide.eclipse.hierarchyviewer.views.LayoutView AppPompat ToolBar popupTheme не используется в элементе меню ShareAction Как отправить строку с помощью NFC с телефона Windows 8 на устройство Android Android-кнопка setPressed после onClick Как получить URI из файла активов? Ошибка: Джек должен поддерживать java 8 языковые функции Как загрузить ImageView по URL в Android? Android-PhoneGap / WebView игнорирует метатеги просмотров? Как получить идентификатор поставщика устройства на базе Android через adb? Где / Как я могу получить драйвер USB для USB SDK для Samsung Galaxy Player (YP-G1) Автоматическое перезапуск приложения после обновления рынка

Как получить идентификатор Android для элемента меню в Android?

Есть ли способ получить идентификатор Android для элемента меню? Я вижу getTitle (), но не getId (). Меня интересует значение ID «menu_printer_settings», а не название «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" /> 

Solutions Collecting From Web of "Как получить идентификатор Android для элемента меню в Android?"

Solution1:

 MenuItem item String[] id = getResources().getResourceName(item.getItemId()).split("\\/"); 

Затем идентификатор доступа [1]

Solution2:

Использовать titleCondensed для соответствия id, например

 <menu> <item android:id="@+id/myid" android:title="some menu title" android:titleCondensed="myid"/> ... </menu> 

тогда

 String selectedMenuIdString = (String) item.getTitleCondensed(); 

Я предпочитаю решение 1, так как мне не нужно повторять идентификационное имя.

Надеюсь это поможет. С уважением, Стив

Попробуй это:

 public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.menu_printer_settings: //do what you want break; } } 

Попробуйте использовать getItemID () также, если у вас все еще есть проблемы:

MenuItem.getItemId возвращает 0 вместо ItemId

Решил его, получив все поля для пакета

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