В некоторых методах моей деятельности я хочу проверить заголовок меню или узнать, проверено ли оно или нет. Как я могу получить меню Activity. Мне нужно что-то вроде this.getMenu()
Как я могу получить меню опций моей деятельности?
Ответы (5)
Будьте осторожны с invalidateOptionsMenu()
. Он воссоздает все меню. Это имеет много накладных расходов и приведет к сбросу встроенных компонентов, таких как SearchView
. Мне потребовалось довольно много времени, чтобы выяснить, почему мой SearchView
"случайно" закрывается.
В итоге я захватил меню, опубликованное Дарком, а затем при необходимости вызвал onPrepareOptionsMenu(Menu)
. Это соответствовало моему требованию без неприятных побочных эффектов. Подсказка: обязательно сделайте нулевую проверку, если вы вызываете onPrepareOptionsMenu()
до создания меню. Я сделал это, как показано ниже:
private Menu mOptionsMenu;
@Override
public boolean onCreateOptionsMenu(final Menu menu) {
mOptionsMenu = menu
...
}
private void updateOptionsMenu() {
if (mOptionsMenu != null) {
onPrepareOptionsMenu(mOptionsMenu);
}
}
invalidateOptionsMenu()
. Я бы предпочел, чтобы это решение использовало меньшую рабочую нагрузку.
- person Nico Dumdum; 21.10.2014
Вызовите invalidateOptionsMenu() вместо того, чтобы передавать объект меню.
requireActivity().invalidateOptionsMenu()
- person lasec0203; 20.11.2020
вы можете сделать это, передав объект Menu в свой класс Activity
public class MainActivity extends Activity
{
...
...
private Menu _menu = null;
@Override
public boolean onCreateOptionsMenu(Menu menu)
{
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.activity_main, menu);
_menu = menu;
return true;
}
private Menu getMenu()
{
//use it like this
return _menu;
}
}
Существует несколько методов обратного вызова, которые предоставляют меню в качестве параметра.
Возможно, вы захотите манипулировать им там.
Например:
onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo)
onCreateOptionsMenu(Menu menu)
onCreatePanelMenu(int featureId, Menu menu)
Есть еще несколько, лучше всего посмотреть документацию по активности и найти нужный метод: http://developer.android.com/reference/android/app/Activity.html
Насколько я мог понять, что вы хотите здесь, это может вам помочь:
1. Обратитесь к этому руководству через меню параметров. а>.
2. Каждый раз, когда пользователь нажимает кнопку меню, вы можете проверить ее название через getTitle()
.
3. Или, если вы хотите узнать, какой последний пункт меню был проверен или выбран, когда пользователь не нажал кнопку меню, вам нужно сохранить настройки, когда пользователь нажимает.