Получить menu в android java
Есть меню, объявленное так:
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Заполнение меню; элементы действий добавляются на панель приложения
getMenuInflater().inflate(R.menu.menu_main, menu);
return super.onCreateOptionsMenu(menu);
}
Мне нужно изменять видимость одного из пунктов (search) этого меню (main_menu) при открытии соответствующей вкладки из этой вкладки. Пытаюсь делать это так:
Menu menu = getActivity().findViewById(menu.menu_main); // (Error) Здесь ошибка menu
getActivity().getMenuInflater().inflate(R.menu.menu_main, menu);
MenuItem search = menu.findItem(R.id.search);
search.setVisible(true);
Но возникает ошибка (студия не принимает "menu" в строке "// (Error)"). Как мне получить само меню в строке, в которой возникает ошибка?
Ответы (2 шт):
Автор решения: 3asys
→ Ссылка
Получилось таким образом: Создаю ссылку на полученное в коде menu:
public static Menu menu1;
@Override
public boolean onCreateOptionsMenu(Menu menu) {
menu1 = menu;
// Заполнение меню; элементы действий добавляются на панель приложения
getMenuInflater().inflate(R.menu.menu_main, menu);
return super.onCreateOptionsMenu(menu);
}
Далее ссылаюсь на статическую переменную menu1 в другом фрагменте.
Автор решения: Andrew
→ Ссылка
Можно в фрагменте добавить в методе onCreate такую строку:
setHasOptionsMenu(true);
и дальше получать доступ к меню которое было добавлено в активности:
@Override
public void onCreateOptionsMenu(Menu menu,MenuInflater inflater) {
// Do something that differs the Activity's menu here
super.onCreateOptionsMenu(menu, inflater);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.activity_menu_item:
// Not implemented here
return false;
case R.id.fragment_menu_item:
// Do Fragment menu item stuff here
return true;
default:
break;
}
return false;
}