微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

android – 调用supportInvalidateOptionsMenu后,操作栏中的子菜单无法正常工作

我有一个活动,它扩展了支持包版本18中包含的ActionBaractivity.我有一个包含子菜单菜单项,当我加载应用程序时它可以正常工作.但是,如果我因某种原因调用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);
}

我应该注意姜饼设备上出现此问题,但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(菜单菜单)中发生

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐