0

私は現在、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>

ご協力いただきありがとうございます。

4

1 に答える 1

2

findViewByIdMenuItemが見つかりません。アクティビティでを使用でき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);
    }
}
于 2012-12-19T23:48:25.530 に答える