MenuItem未找到,但正在屏幕上显示

时间:2012-12-19 23:43:11

标签: android menuitem

我目前正在开发一个Android项目,我有一个奇怪的问题。它可能是非常简单的我想念但却看不出我做错了什么。

我在我的XML文件中添加了一个新的菜单项,然后我尝试引用新的菜单项来显示或隐藏它。当我运行应用程序时,屏幕上会显示菜单项,因此我知道我的XML正确并且文件正确但是当我尝试执行findViewById时它会返回null。

以下是代码。

MenuItem mnuUpgrade;
    mnuUpgrade = (MenuItem)findViewById(R.id.mnu_upgrade);
            if (common.checkForProVersion())
            {
                //mnuUpgrade.setVisible(false);
            }
            else
            {
                //mnuUpgrade.setVisible(true);
            }

以下是我的XML文件

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
    <item android:id="@+id/mnu_addLogin"
        android:title="New Login"
        android:icon="@android:drawable/ic_menu_add"
        android:showAsAction="always">
    </item>
    <item android:id="@+id/mnu_search"
        android:title="Search"
        android:icon="@android:drawable/ic_menu_search"
        android:showAsAction="always">
    </item>
    <item android:id="@+id/mnu_settings"
        android:title="Settings"
        android:showAsAction="ifRoom"
        android:icon="@android:drawable/ic_menu_manage">
    </item>
    <item android:id="@+id/mnu_upgrade"
        android:title="Upgrade"
        android:showAsAction="ifRoom"
        android:icon="@android:drawable/ic_menu_upload">
    </item>
    <item android:id="@+id/mnu_logout"
        android:title="Log out"
        android:showAsAction="ifRoom"
        android:icon="@android:drawable/ic_menu_close_clear_cancel">
    </item>
</menu>

感谢您提供的任何帮助。

1 个答案:

答案 0 :(得分:2)

findViewById无法找到MenuItem。您可以在活动中使用onPrepareOptionsMenu。当用户尝试打开菜单时调用它。你可以试试这个:

@Override
public boolean onPrepareOptionsMenu (Menu menu) {
    MenuItem item = menu.getItem(3);
    // the number is the position of your "upgrade" item in the menu, starting from 0
    // then check for the pro version
    if(common.checkForProVersion()) {
        item.setVisible(false);
    } else {
        item.setVisible(true);
    }
}