Скрыть / Показать панель действий Вариант Пункт меню для разных фрагментов

? Gaurav Arora @ | Original: StackOverFlow
---

У меня есть Шерлок Фрагмент активность, в котором есть 3 фрагментов.

Фрагмент, фрагмент B, фрагмент C три фрагмента . Я хочу, чтобы показать проделанную меню опций только в Фрагмент B .

И активность начинается с фрагмента А. Когда Фрагмент B выбран сделано кнопку добавлен.

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

Когда я снова начать Фрагмент AI хотите опций меню сделать ( который был установлен на Фрагмент B ) для этого я делаю так

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

Но это не скрывается вообще, и это дает NullPointerException, когда активность при первом запуске с фрагментом А.

Пожалуйста, дайте мне знать, что это проблема.

---

Top 5 ответ

1The Metal Beard @

Это один из способов сделать это :

добавить " группу " для меню :

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

Переменная вашей деятельности и установить его в вашем отключением onCreateOptionsMenu :

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

После, добавлять и использовать эту функцию, чтобы вашей деятельности, когда вы хотите, чтобы показать / скрыть меню :

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

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

2Ibraheem Saoud @

Вы можете сделать меню для каждого фрагмента, и глобальную переменную, которая, с какими фрагмент используемой в данный момент . и проверьте значение переменной в onCreateOptionsMenu и раздувать правильный меню

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

Это будет работать точно, я думаю ...

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

Вы также можете передать этот http://www.vogella.com/tutorials/AndroidActionBar/article.html для более подробной информации, этоочень полезный .