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(). 这样做是它使菜单无效,进而迫使它被重新创建。在重新创建期间,回调之一是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 回答
0

通过工具栏访问菜单的方式,无需专用变量:

MenuItem menuItem = ((Toolbar)findViewById(R.id.toolbar)).getMenu().findItem(R.id.pencil);
menuItem.setVisible(true);
于 2020-07-13T06:58:24.803 回答