2014-01-08 81 views
0

我有3个标签作为碎片的活动。我也有3个ActionBar项目。在每个选项卡上只应显示一个项目,其他项目应在溢出菜单中。我的代码看起来像这样在更改标签上更改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行隐藏似乎不起作用。当我将选项卡更改为第二个选项卡时,出现第三项3项。切换到以前的选项卡不会隐藏项目。我正在使用ActionBarCompat。这是一个错误吗?

编辑:其实在Android 4.1上运行CyanogenMod的三星Galaxy S(第一个)也表现得如此。因此,当我们使用物理按钮而不是软件按键时,它可能会与情况相关联。

回答

1

我不太确定,但问题可能是因为操作栏尚未实现,所以API不知道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-自动“yourapp:showAsAction =”always“可以使图标始终可见。即使对于API 7-10。 否则菜单项将出现在溢出菜单中。

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

+0

我想避免在3个地方创建3个xmls和处理onOptionsItemSelected(),但是因为这个工作对我来说我接受了你的答案。谢谢。 –