2014-02-05 3 views
7

UPDATEКак настроить видимость для группы меню панели действий?

Первоначально я использовал ActionBarSherlock С тех пор я создал новый проект бренда, используя родной андроида панель действий просто чтобы проверить это, и я все еще получаю такую ​​же проблему.

Я успешно показываю/скрываю элементы, но не группы. Я быстро прихожу к выводу, что есть ошибка в ActionBar и это не представляется возможным, чтобы программно настроить видимость группы

Конец UPDATE

Учитывая следующее меню При обращении к группе I исключения нулевого указателя

<menu xmlns:android="http://schemas.android.com/apk/res/android" > 

    <item android:id="@+id/action_settings" 
     android:title="@string/settings" 
     android:orderInCategory="100" 
     android:showAsAction="never"/> 

     <group android:id="@+id/mnu_text_group" 
      android:visible="false"> 
      <item android:id="@+id/mnu_text_type" 
       android:enabled="true" 
       android:visible="true" 
       android:icon="@drawable/ic_action_text_icon" 
      android:showAsAction="always"> 
      </item> 
      <item android:id="@+id/text_color" 
       android:enabled="true" 
       android:visible="true" 
       android:showAsAction="always" 
       android:icon="@drawable/ic_action_color_line"> 
      </item> 
     </group>   
    <item android:id="@+id/mnu_images" 
... 

В onPrepareOptionsMenu соответствующей деятельности у меня есть

public boolean onPrepareOptionsMenu(Menu menu) { 
    MenuItem mnuTextGroup = menu.findItem(R.id.mnu_text_group); 
    mnuImage.setEnabled(mEnableImageMenu); 
    mnuTextGroup.setVisible(false); 
    ... 

Вызов mnuTextGroup.setVisible(false); вызывает исключение нулевого указателя

Однако, изменив метод поиска, чтобы найти элемент внутри группы, работает нормально, например. MenuItem mnuTextGroup = menu.findItem(R.id.mnu_text_type);, но, очевидно, это работает только для конкретного элемента. Я знаю, что группы предназначены именно для этой цели, чтобы иметь возможность устанавливать видимость и включать/отключать все элементы внутри группы, но я не смог найти способ сделать это программно.

ответ

32

Наконец нашел решение мне нужно использовать setGroupVisible() метод объекта меню передается в метод onPrepareOptionsMenu()

Это то, что работает для меня

Вместо

MenuItem mnuTextGroup = menu.findItem(R.id.mnu_text_group); 
mnuImage.setEnabled(mEnableImageMenu); 
mnuTextGroup.setVisible(false); 

Это то, что мне нужно было

menu.setGroupVisible(R.id.mnu_text_group, false); 
0

Использование В активность Где вы хотите скрыть

@Override 
    public boolean onCreateOptionsMenu(Menu menu) { 

     getSupportMenuInflater().inflate(R.menu.main_itemlist, menu); 
     boolean isdown = false; 

     menu.findItem(R.id.addwork).setVisible(isdown); 

     MenuItem mnuTextGroup = menu.findItem(R.id.mnu_text_group); 
      mnuTextGroup.setVisible(isdown); 

     return true; 
    } 
+0

Нет, все равно получите исключение из null указателя. На самом деле не понимаю, почему вы думаете, что использование логической переменной, а не жесткого кодирования false, предотвратит исключение null-указателя для переменной mnuTextGroup? – jamesc

+0

Его работая в моем случае. Я не понимаю, что вы получаете исключение с нулевой точкой. –

+0

Он не работает для , он работает только с jamesc

0

изменения меню настроек должно быть сделано в onPrepareOptionsMenu или иначе она иногда не работает (не знаю точно, почему, надеюсь, кто-то может уточнить):

@Override public boolean onPrepareOptionsMenu(Menu menu) { 
    super.onPrepareOptionsMenu(menu); 
    // set visibility of menu items here 
    return true; 
} 
Смежные вопросы