Android invalidateOptionsMenu未更新操作栏

时间:2013-12-11 11:02:44

标签: android android-actionbar

我的目标是Android> = 4而且我的ActionBar存在问题。

我需要动态更新操作栏,所有代码似乎在Nexus 7和Nexus 4上运行正常。我遇到的问题是Xperia S(Android 4.1.2)。 Nexus设备立即更新ActionBar。只有在按下硬件菜单按钮时,Xperia才会更新。

我调用invalidateOptionsMenu(),然后成功调用所有设备上的onPrepareOptionsMenu(菜单菜单)。不同之处在于Xperia根本不更新显示器。单击硬件菜单按钮后,弹出菜单项和按钮。

我已经阅读了不少帖子并尝试了很多方法 - 我根本无法使Xperia正常运行。

1 个答案:

答案 0 :(得分:0)

我已经搞砸了这一点,我能想到的最好的方法就是重新创建给予和不可接受的用户体验的活动。

在带有软菜单按钮的设备上,一切正常。在我能想出更好的东西之前,我决定将所有菜单项强制到带有硬件菜单按钮的设备的操作栏下拉菜单中。

我在活动的onCreate中检测到硬件菜单按钮;

this.hardwareMenuButton = ViewConfiguration.get(getApplicationContext()).hasPermanentMenuKey();

然后我有这样的事情;

@Override
public boolean onPrepareOptionsMenu(Menu menu) {

    MenuItem menuItem = menu.add("Refresh");        
    if(this.hardwareButton) {
        menuItem.setShowAsActionFlags(android.view.MenuItem.SHOW_AS_ACTION_NEVER);
    } else {
        menuItem.setIcon(R.drawable.ic_action_refresh);
        menuItem.setShowAsActionFlags(android.view.MenuItem.SHOW_AS_ACTION_IF_ROOM);
    }

    return super.onPrepareOptionsMenu(menu);

}