1

我有 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(第一个)上也有这样的行为。所以它可能与我们有物理按钮而不是软件键的情况有关。

4

1 回答 1

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()

于 2014-01-09T14:59:58.527 回答