Mostra / Nascondi Barra azioni Voce Opzione di menu per i diversi frammenti

? Gaurav Arora @ | Original: StackOverFlow
---

Ho un frammento Activity Sherlock in cui ci sono 3 Fragments .

Frammento A, frammento B, frammento C sono tre frammenti . Voglio mostrare un menu di opzioni in fatto solo frammento B .

E l' attività è iniziata con Frammento A. Quando si seleziona frammento B è aggiunto il pulsante Fine .

@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);
    }

Quando ho di nuovo inizio Frammento AI vuole opzioni del menu DONE ( che è stato fissato a frammento B ) per questo che sto facendo in questo modo

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

Ma questo non si nasconde affatto, anche sta dando NullPointerException quando Activity se iniziato con Frammento A.

Fatemelo sapere qual è il problema .

---

Top 5 Risposta

1The Metal Beard @

Questo è un modo di fare questo :

aggiungere un " gruppo" al menu :

<?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;

variabile per la vostra attività e impostarlo in sostituzione di onCreateOptionsMenu :

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

Dopo, aggiungere e utilizzare questa funzione per la vostra attività quando vuoi mostrare / nascondere il menu :

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

Non sto dicendo che questo è il migliore / unico modo, ma funziona bene per me .

2Ibraheem Saoud @

È possibile effettuare un menu per ogni frammento, e una variabile globale che segnano che frammento è in uso oggi . e controllare il valore della variabile in onCreateOptionsMenu e gonfiare il menu corretto

 @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 @

Ciò funzionerà di sicuro immagino ...

// 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

È inoltre possibile consultare questo http://www.vogella.com/tutorials/AndroidActionBar/article.html per maggiori dettagli, è molto utile.