2014-02-05 8 views
7

UPDATESo legen Sie die Sichtbarkeit für eine Aktionsleistenmenügruppe fest?

Ursprünglich war ich mit ActionBarSherlock ich da habe ein brandneues Projekt mit einer nativen Android-Aktionsleiste erstellt gerade dies zu testen und ich bin immer noch das gleiche Problem bekommen.

Ich zeige/verstecke erfolgreich Objekte, aber keine Gruppen. Ich komme schnell zu dem Schluss, dass es einen Fehler in der ActionBar ist, und es ist nicht möglich, programmatisch die Sichtbarkeit einer UPDATE

ENDE

Gruppe gesetzt

das folgende Menü gegeben, wenn die Gruppe I Zugriff einen null-Zeiger Ausnahme erhalten

<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" 
... 

im onPrepareOptionsMenu der betreffenden Tätigkeit habe ich

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

Der Aufruf an mnuTextGroup.setVisible(false); löst eine Nullzeigerausnahme

durch Ändern der Suchmethode, um ein Element in der Gruppe zu finden, funktioniert z. MenuItem mnuTextGroup = menu.findItem(R.id.mnu_text_type); aber offensichtlich funktioniert das nur für den spezifischen Artikel. Ich weiß, dass Gruppen für genau diesen Zweck entworfen sind, um die Sichtbarkeit von allen Elementen innerhalb der Gruppe zu aktivieren und zu deaktivieren, aber ich habe keine Möglichkeit gefunden, dies programmatisch zu tun.

Antwort

32

schließlich die Lösung zu verbergen fand ich die setGroupVisible() Methode des Menüs Objekt in die onPrepareOptionsMenu() Methode

geben verwenden benötigt Dies ist, was funktioniert für mich

Statt

Das ist, was ich brauchte

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

Verwendung In Aktivität Where You Want

@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

Nein, immer noch null Zeiger Ausnahme. Verstehen Sie wirklich nicht, warum Sie denken würden, dass die Verwendung einer booleschen Variablen anstelle einer harten Codierung false eine Nullzeigerausnahme für die Variable mnuTextGroup verhindern würde? – jamesc

+0

Seine Arbeit In meinem Fall. Ich verstehe nicht, dass Sie eine Nullpunkt-Ausnahme erhalten. –

+0

Es funktioniert nicht für eine , es funktioniert nur für eine jamesc

0

das Optionsmenü zu ändern muss innerhalb onPrepareOptionsMenu oder aber manchmal funktioniert es getan werden nicht (nicht sicher, warum, hoffentlich kann jemand anderes erarbeiten):

@Override public boolean onPrepareOptionsMenu(Menu menu) { 
    super.onPrepareOptionsMenu(menu); 
    // set visibility of menu items here 
    return true; 
}