2014-01-08 3 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 для скрытия, похоже, не работает. Когда я меняю вкладку на вторую вкладку, появляются 2 элемента, на 3-х элементах. Переход на предыдущие вкладки не скрывает элементы. Я использую ActionBarCompat. Это ошибка?

Редактировать: На самом деле он также ведет себя как на Samsung Galaxy S (первый), на котором работает CyanogenMod на Android 4.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().

+0

Я хотел избежать создания 3 xmls и обработки onOptionsItemSelected() в 3-х местах, но поскольку эта работа для меня, я собираюсь принять ваш ответ. Спасибо. –

Смежные вопросы