2016-10-28 1 views
0

Я уже давно застрял в этой проблеме. В моем коде у меня есть фрагмент, внутри которого я не хочу показывать пункт меню поиска. Для того, чтобы добиться того, что я делаю это внутри фрагментаMenuItem, скрытый во фрагменте, невидимый при выполнении setVisible (true) в основной деятельности

Внутри onCreate

setHasOptionsMenu(true); 

Тогда

@Override 
    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { 
     super.onCreateOptionsMenu(menu, inflater); 
     this.menu = menu; 
     MenuItem search = menu.findItem(R.id.action_search); 
     search.setVisible(false); 
    } 

Это работает точно так, как ожидалось, и скрывает элемент. Теперь, когда я делаю назад нажмите о nBackPressed() основной деятельности называется и там я это сделать

@Override 
public void onBackPressed() { 

    // code skipped 
    invalidateOptionsMenu(); 
} 

Это вызывает onCreateOptionsMenu внутри основной деятельности, которая заключается в следующем

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

     item = menu.findItem(R.id.action_search); 
     item.setVisible(true); 

     //code skipped 
} 

onCreateOptionsMenu функция но, к сожалению, menuItem по-прежнему остается скрытым, и я не вижу меню поиска.

Может кто-то помочь, что может быть проблемой? Заранее спасибо !!

ответ

1

Метод onCreateOptionsMenu вызывается только при создании активности (или фрагменте). Используйте onPrepareOptionsMenu, чтобы установить видимость элемента меню. invalidateOptionsMenu звонки onPrepareOptionsMenu, а не onCreateOptionsMenu.

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