Hide / Show Bar Ação Menu Item Opção para diferentes fragmentos

? Gaurav Arora @ | Original: StackOverFlow
---

I têm um fragmento Actividade Sherlock em que existem três fragmentos .

Um fragmento, o fragmento B, Fragmento C são três fragmentos . Eu quero mostrar um menu de opções feitas em Fragmento apenas B .

E a atividade é iniciado com Fragmento A. Quando Fragmento B é selecionado botão feito é adicionado .

@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 eu começar de novo Fragmento AI quer opções Menu FEITO (que foi fixado em Fragmento B) por isso eu estou fazendo como este

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

Mas isso não está se escondendo em tudo, também está dando NullPointerException quando a atividade se primeiro começou com Fragmento A.

Por favor, deixe-me saber o que é o problema.

---

Top 5 Responder

1The Metal Beard @

Esta é uma maneira de se fazer isso :

adicionar um "grupo" para o 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;

variável para sua atividade e colocá-lo em sua substituição de onCreateOptionsMenu :

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

Depois, adicionar e usar essa função para sua atividade quando você gostaria de mostrar / ocultar o menu :

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

Não estou dizendo que este é o melhor único caminho /, mas funciona bem para mim.

2Ibraheem Saoud @

Você pode fazer um menu para cada fragmento, e uma variável global que marcar quais fragmento está em uso agora. e verifique o valor da variável no onCreateOptionsMenu e inflar o menu correto

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

Isso vai funcionar com certeza eu acho ...

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

Você também pode consultar esta http://www.vogella.com/tutorials/AndroidActionBar/article.html para obter mais detalhes, ele é muito útil.