android - 调用 supportInvalidateOptionsMenu 后操作栏中的子菜单不起作用

标签 android

我有一个扩展支持包修订版 18 中包含的 ActionBarActivity 的 Activity 。我有一个包含子菜单的菜单项,当我加载应用程序时它工作正常。但是,如果我出于某种原因调用 supportInvalidateOptionsMenu(),则子菜单不会再弹出。相关代码是菜单的 xml

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:myapp="http://schemas.android.com/apk/res-auto" >

<item
    android:id="@+id/menu_search"
    android:icon="@drawable/ic_search"
    android:title="@string/menu_search"
    myapp:actionViewClass="android.support.v7.widget.SearchView"
    myapp:showAsAction="always|collapseActionView"/>
<item
    android:id="@+id/menu_now_playing"
    android:icon="@drawable/ic_nowplaying"
    android:title="@string/menu_nowplaying"
    myapp:showAsAction="always"/>
<item
    android:id="@+id/menu_station_overflow"
    android:icon="@drawable/ic_overflow"
    android:title="@string/more"
    myapp:showAsAction="always">
    <menu>
        <item
            android:id="@+id/menu_favorite"
            android:icon="@drawable/ic_favorite"
            android:title="@string/favorite"/>
    </menu>
</item>

</menu>

然后是创建菜单的代码

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.main_activity, menu);
    return super.onCreateOptionsMenu(menu);
}

我应该注意到这个问题发生在 Gingerbread 设备上,但在 android 4.x 上没有问题。有谁知道这里会发生什么?

最佳答案

这是一个解决方法(因为我们遇到了同样的问题)。任何以后需要修改的菜单项,我们放入实例变量中,例如:

private MenuItem stationMenuItem;

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.main_activity, menu);

    stationMenuItem = menu.findItem(R.id.menu_station_overflow);

    return super.onCreateOptionsMenu(menu);
}

public void doStuff(boolean menuVisible) {
    if (stationMenuItem != null) {
        stationMenuItem.setVisible(menuVisible);
    }
}

这不是一个理想的解决方案,但在解决此问题之前可以使用。在调用 supportInvalidateOptionsMenu()

之后,菜单项的更改应该发生在 onPrepareOptionsMenu(Menu menu)

关于android - 调用 supportInvalidateOptionsMenu 后操作栏中的子菜单不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18250612/

相关文章:

android - 如何在没有 Root 设备的情况下使用自己的 Android 服务进行屏幕截图?

java - notifyDataSetChanged() 使列表刷新并滚动跳回顶部

java - Android webview 与 fcm

android - android.view.WindowManager $ BadTokenException : Unable to add window — token android. os.BinderProxy@27773032无效;您的 Activity 正在进行吗?

android - 从 Facebook 链接打开应用程序

android - java.lang.IllegalStateException : Fragment no longer exists for key f0: unique id

android - 更改操作栏微调器主题

java - 如何在android studio中的java类中的包文件中打开sqlite db

Android Studio 在 string.xml 文件中显示印地语方框

android - 在 android strings.xml 中引用字符串数组