android - 以编程方式更改菜单项在 android 中不起作用

标签 android android-layout menuitem

我有一个菜单项,我想以编程方式更改其可见性。菜单是这个

<?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

有人帮忙解决这个问题吗?

最佳答案

因为你没有提供任何其他代码,所以我不能说太多。

但是,无论何时您想要更改菜单,都应该调用 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);
}

关于android - 以编程方式更改菜单项在 android 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17496442/

相关文章:

css - 如何在 material ui REACTjs 中覆盖 menuItem 中的选定类?

java - 如何从 Activity 外部扩展 SupportActionBar 菜单

java - 将触摸事件从回收器传递到其父 LinearLayout

android - android :windowBackground and android:colorBackground? 之间的区别

android - 在 XML 中的 TabHost 下方添加 AdView

c++ - 难以从 CImageList 设置菜单项位图

php - 更改类别页面的内容

java - 非常简单的 onClick Android 应用程序无法正常工作

android - 将 iOS 应用程序移植到 Android

java - 为什么数字会自动转换为双倍?