Hide / Show -Aktionsleiste Option Menüpunkt für verschiedene Fragmente

? Gaurav Arora @ | Original: StackOverFlow
---

Ich habe eine Sherlock Fragment Aktivität, in dem es 3 Fragments .

Fragment A, Fragment B, Fragment C drei Fragmenten . Ich möchte einen getan Optionsmenü in nur Fragment B zu zeigen.

Und die Aktivität wird mit Fragment A. begann Als Fragment B ausgewählt getan Schaltfläche hinzugefügt.

@Override
    public void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setHasOptionsMenu(true);
    }

@Override
    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
        if(!menusInflated){
            inflater.inflate(R.menu.security, menu);
            menusInflated=true;
        }
        super.onCreateOptionsMenu(menu, inflater);
    }

Als ich wieder zu starten Fragment AI will Optionen Menü DONE ( die an Fragment B eingestellt wurde ) dafür bin ich so tun,

        setHasOptionsMenu(false);
MenuItem item = (MenuItem) menu.findItem(R.id.done_item);
        item.setVisible(false);

Aber das ist überhaupt nicht zu verstecken, auch es gibt Nullpointerexception, wenn Aktivität, wenn zunächst mit Fragment A. begonnen

Bitte lassen Sie mich wissen, was das Problem ist.

---

Top 5 Antwort

1The Metal Beard @

Dies ist ein Weg, dies zu tun :

Eine "Gruppe" zu Ihrem Menü :

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android" >

    <group
        android:id="@+id/main_menu_group">
         <item android:id="@+id/done_item"
              android:title="..."
              android:icon="..."
              android:showAsAction="..."/>
    </group>
</menu>

then, add a

Menu menu;

Variable an Ihre Tätigkeit und legen Sie sie in der Überschreibung von onCreateOptionsMenu :

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    this.menu = menu;
    // inflate your menu here
}

Nach dem Fügen und verwenden Sie diese Funktion, um Ihre Aktivität, wenn Sie möchten, Ein- / Ausblenden des Menüs :

public void showOverflowMenu(boolean showMenu){
        if(menu == null)
            return;
        menu.setGroupVisible(R.id.main_menu_group, showMenu);
}

Ich sage nicht, das ist die beste / einzige Weg, aber es funktioniert gut für mich.

2Ibraheem Saoud @

Sie können ein Menü für jedes Fragment, und eine globale Variable, die kennzeichnen, das Fragment im Einsatz ist, zu machen. und prüfen Sie den Wert der Variablen in onCreateOptionsMenu und pumpen Sie die richtige Menü

 @Override
     public boolean onCreateOptionsMenu(Menu menu) {
         if (fragment_it == 6) {
             MenuInflater inflater = getMenuInflater();
             inflater.inflate(R.menu.custom_actionbar, menu);
         }
     } 
3Petrovich Denis @
@Override
public boolean onCreateOptionsMenu(Menu menu){
         MenuInflater inflater = getMenuInflater();
         inflater.inflate(R.menu.custom_actionbar, menu);
         menu.setGroupVisible(...);
     }
 } 
4Pravinsingh Waghela @

Dies wird mit Sicherheit Ich denke, zu arbeiten ...

// Declare
Menu menu;
MenuItem menuDoneItem;

// Then in your onCreateOptionMenu() method write the following...
@Override
    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
        this.menu=menu;
        inflater.inflate(R.menu.secutity, menu);
            }

// In your onOptionItemSelected() method write the following...
@Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
            case R.id.done_item:
                this.menuDoneItem=item;
                someOperation();
                return true;
            default:
                return super.onOptionsItemSelected(item);
        }
    }

// Now Making invisible any menu item...
public void menuInvisible(){
setHasOptionsMenu(true);// Take part in populating the action bar menu
            menuDoneItem=(MenuItem)menu.findItem(R.id.done_item);
                menuRefresh.setVisible(false); // make true to make the menu item visible.
}

//Use the above method whenever you need to make your menu item visible or invisiable

Sie können auch beziehen diese http://www.vogella.com/tutorials/AndroidActionBar/article.html für weitere Informationen, es ist ein sehr nützlich.