如何让Android的ID在Android的菜单项?

问题描述 投票:12回答:4

有没有办法让Android的ID菜单项?我可以看到的getTitle(),但不是的getId()。我感兴趣的ID值“menu_printer_settings”,而不是标题值“printer_settings”和菜单项的ID(getItemId())。我需要这个ID使我的猴子对话脚本工作的本地化版本也。

<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<item
    android:id="@+id/menu_printer_settings"        
    android:title="@string/printer_settings"
/>

android string menu resources monkeyrunner
4个回答
13
投票

解决方法1:

MenuItem item

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

然后访问ID [1]

溶液2:

使用titleCondensed的id例如匹配

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

然后

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

我更喜欢解决方案1,因为我没有重复的ID名称。

希望这可以帮助。关于史蒂夫


9
投票

尝试这个:

public boolean onOptionsItemSelected(MenuItem item) {

            switch (item.getItemId()) {

            case R.id.menu_printer_settings:
                    //do what you want  
                    break;
                }
}

0
投票

尝试使用getItemID()也看看下面的,如果你仍然有问题:

MenuItem.getItemId returns 0 instead of ItemId


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

        }
© www.soinside.com 2019 - 2024. All rights reserved.