2016-03-08 2 views
3

Я заменяю 2 фрагмента Один за другим, и оба фрагмента имеют разные меню опций. Когда я заменяю второй фрагмент, он также показывает меню 1-го фрагмента. setHasOptionMenu (истина); установлен в обоих фрагментах.Меню опций фрагмента Избегайте отображения одного меню фрагментов В другом

Я хочу показать только это меню опций, которое я создаю, в частности, фрагмент и «Избегайте вариантов других фрагментов».

пожалуйста, помогите, спасибо

+1

Можете ли вы опубликовать код о том, как вы заменяете фрагменты? Вы не используете FragmentTransaction .replace()? Как ваша настройка xml/как вы инициализируете фрагменты? –

+0

Лучший способ состоит в том, чтобы все меню в одном файле и раздувались в активности. После загрузки Fragment из вызова Activity invalidateOptionsMenu(), а затем в onPrepareOptionsMenu() обрабатывает видимость соответствующих пунктов меню. –

+0

@ Jogendra Gouda, вы пробовали мое решение? –

ответ

0

invalidateOptionsMenu() Просто позвоните на OnCreate().

Дополнительная информация check this one.

Надеюсь, это вам поможет.

0

Это как ваша деятельность будет

@Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     getMenuInflater().inflate(R.menu.menu, menu); 
     return true; 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     int id = item.getItemId(); 
     switch (id) { 
      //your menu item 
       return true; 
     } 

     return super.onOptionsItemSelected(item); // important line 
    } 

В вашем методе фрагмента onCreateView()

@Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
     setHasOptionsMenu(true); //imp line 
     return inflater.inflate(R.layout.fragment_following, container, false); 
    } 



@Override 
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { 
    inflater.inflate(R.menu.fragment_menu, menu); 
} 

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    int id = item.getItemId(); 
    switch (id) { 
     case R.id.action_1: 
      // do stuff 
      return true; 

     case R.id.action_2: 
      // do more stuff 
      return true; 
    } 

    return false; 
} 
0

Только после замены фрагмента (или совершала сделку фрагмента), вы должны объявить, что меню опций изменилось, вы можете сделать это, позвонив invalidateOptionsMenu(). Метод onCreateOptionsMenu (Menu) будет вызываться в следующий раз, когда его нужно будет отобразить.

ПРИМЕЧАНИЕ: вам понадобится позвонить supportInvalidOptionsMenu в случае, если вы используете библиотеку поддержки AppCompat.

Смежные вопросы