В методе onCreateOptionsMenu
моей активности я просто увеличиваю файл макета меню и прикрепляю его.
Я хочу показать/скрыть некоторые пункты меню на основе значения a глобальной переменной, я делаю это в методе onPrepareOptionsMenu
. Я читал, что это правильное место для этого.
Мой метод onPrepareOptionsMenu
не всегда срабатывает. Я не знаю почему, но он не всегда срабатывает, когда я нажимаю кнопку «Меню» на своем телефоне. Возможно, это как-то связано с его внутренним состоянием.
Кажется, он срабатывает, когда создается Activity. Нажатие кнопки «Меню» в первый раз не приводит к срабатыванию, но если я нажимаю кнопку меню во второй раз, все работает нормально.
Есть ли способ заставить onPrepareOptionsMenu
стрелять.
Спасибо
Смок предложил использовать метод invalidateOptionsMenu
для аннулирования элементов меню, но это также приводит к срабатыванию метода onCreateOptionsMenu
. Вот мой метод:
@Override
public boolean onCreateOptionsMenu(Menu menu) {
System.out.println("onCreate");
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.search, menu);
SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
SearchView searchView = (SearchView) menu.findItem(R.id.search).getActionView();
searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName()));
searchView.setIconified(false);
searchView.requestFocusFromTouch();
return true;
}
@Override
public boolean onPrepareOptionsMenu (Menu menu) {
System.out.println("prepared");
if (this.objAdapter == null) {
menu.findItem(R.id.sort).setVisible(false);
menu.findItem(R.id.filter).setVisible(false);
menu.findItem(R.id.group).setVisible(false);
} else {
menu.findItem(R.id.sort).setVisible(true);
menu.findItem(R.id.filter).setVisible(true);
menu.findItem(R.id.group).setVisible(true);
}
return true;
}
Как вы можете видеть из моего метода onCreateOptionsMenu
, его повторный вызов приведет к потере фокуса на SearchView
.
onCreateOptionMenu
по какой-то причине. Я создаю экземплярSearchView
в этом методе и устанавливаю фокус наSearchView
, чтобы пользователь мог начать поиск. Если для срабатыванияonPrepareOptionsMenu
требуетсяinvalidateOptionsMenu
, аonCreateOptionsMenu
тоже срабатывает, фокус возвращается кSearchView
. Похоже на ситуацию Catch-22. Есть еще предложения? - person Mridang Agarwalla   schedule 13.09.2012