2014-01-08 108 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(),但是因爲這個工作對我來說我接受了你的答案。謝謝。 –