2

メニュー項目があり、その可視性をプログラムで変更したいと考えています。メニューはこちら

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android" > 
     <item
        android:id="@+id/pencil"
        android:orderInCategory="100"
        android:showAsAction="always"
        android:visible="true"
        android:title="@string/for_pencil"/>

</menu>

それから私のコードのどこかに私が持っている

((MenuItem) findViewById(R.id. pencil)).setVisible(false);

エラー:

E/AndroidRuntime(13845): FATAL EXCEPTION: main
E/AndroidRuntime(13845): java.lang.ClassCastException: com.android.internal.view.menu.ActionMenuItemView cannot be cast to android.view.MenuItem

これを整理する助けはありますか?

4

2 に答える 2

31

あなたは他のコードを提供していないので、それについてはあまり言えません。

ただし、メニューを変更したい場合はいつでも を呼び出す必要がありますinvalidateOptionsMenu()。それが何をするかというと、メニューが無効になり、その結果、メニューが強制的に再作成されます。再作成中のコールバックの 1 つはonPrepareOptionsMenu(Menu menu). ここで、メニューを変更できます。

例:

// This is where I want to change the menu. Can be anywhere in your activity.
invalidateOptionsMenu();

次に、このメソッドをオーバーライドします

// Override this method to do what you want when the menu is recreated
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
    menu.findItem(R.id.pencil).setVisible(false);
    return super.onPrepareOptionsMenu(menu);
}
于 2013-07-05T20:35:01.660 に答える