Как получить идентификатор 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;
                }
}