在更改选项卡上更改ActionBar项目的可见性

时间:2014-01-08 18:32:25

标签: android android-actionbar menuitem android-appcompat

我有3个标签作为片段的活动。我还有3个ActionBar项目。在每个选项卡上,只应显示一个项目,其他项目应在溢出菜单中。我的代码看起来像这样

private void updateMenuItemsVisibility()
{
    MenuItem itemAddGate = menu.findItem(R.id.action_add_gate);
    MenuItem itemAddLinking = menu.findItem(R.id.action_new_linking);
    MenuItem itemNewConversation = menu.findItem(R.id.action_new_conversation);
    MenuItemCompat.setShowAsAction(itemNewConversation,
            MenuItemCompat.SHOW_AS_ACTION_NEVER);
    MenuItemCompat.setShowAsAction(itemAddLinking, MenuItemCompat.SHOW_AS_ACTION_NEVER);
    MenuItemCompat.setShowAsAction(itemAddGate, MenuItemCompat.SHOW_AS_ACTION_NEVER);
    if (viewPager.getCurrentItem() == 0)
    {
        MenuItemCompat.setShowAsAction(itemNewConversation,
                MenuItemCompat.SHOW_AS_ACTION_ALWAYS);
    }
    if (viewPager.getCurrentItem() == 1)
    {
        MenuItemCompat.setShowAsAction(itemAddLinking, MenuItemCompat.SHOW_AS_ACTION_ALWAYS);
    }
    if (viewPager.getCurrentItem() == 2)
    {
        MenuItemCompat.setShowAsAction(itemAddGate, MenuItemCompat.SHOW_AS_ACTION_ALWAYS);
    }
}

它在Android 4.x上运行...在2.1线上隐藏似乎不起作用。当我将标签更改为第二个标签时,出现第2个项目,第3个项目。切换到以前的选项卡不会隐藏项目。我正在使用ActionBarCompat。这是一个错误吗?

编辑:实际上在Android 4.1上运行CyanogenMod的三星Galaxy S(第一个)上也表现得像这样。因此,当我们有物理按钮而不是软件密钥时,它可能与情况有关。

1 个答案:

答案 0 :(得分:1)

我不太确定,但问题可能是API< 11由于动作栏尚未实现,因此不知道SHOW_AS_ACTION_ALWAYS。

这就是为什么你必须在菜单中添加2行代码,如下所示:

<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:yourapp="http://schemas.android.com/apk/res-auto">
    <item
        android:id="@+id/new_sms"
        android:title="@string/create_sms"
        android:orderInCategory="1"
        android:showAsAction="always"
        yourapp:showAsAction="always"
        android:icon="@drawable/arrow_right" />
</menu> 

xmlns:yourapp =“http://schemas.android.com/apk/res-auto” yourapp:showAsAction =“always”制作它可能总是看到图标。即使是API 7 - 10。 否则菜单项将出现在溢出菜单中。

我不确定如何以编程方式实现此功能,但您可以编写3个菜单资源,并调用onSupportInvalidateOptionsMenu()让片段显示自己的菜单。 如果您这样做,请不要忘记在片段“setHasOptionsMenu(true)”中致电onCreate()