Ответ 1
В API < 11
используйте метод supportInvalidateOptionsMenu()
Я использовал ActivityCompat.invalidateOptionsMenu(MainActivity.this);
, чтобы мой пункт меню "Обновить" можно автоматически включить/отключить без использования, чтобы коснуться опции "Меню" (представьте, что пользователь покидает меню в открывшемся окне... Мне нужно "Обновить", пункт меню для автоматического отключения и включения самого).
ActivityCompat.invalidateOptionsMenu(MainActivity.this)
отлично работает в Android 11+. Но что я могу использовать для API android, 11?: S Я искал столько, но не могу найти ответа. Может ли кто-нибудь помочь мне в этом?
Это отлично работает в Android API 11+, используя onPrepareOptionsMenu
и ActivityCompat.invalidateOptionsMenu(MainActivity.this)
.
Проблема заключается в том, чтобы сделать это в Android API < 11.
Вот мой метод onPrepareOptionsMenu
:
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
if(menuRefreshEnable){
menu.getItem(0).setEnabled(true);
}
if(!menuRefreshEnable){
menu.getItem(0).setEnabled(false);
}
return true;
}
В API < 11
используйте метод supportInvalidateOptionsMenu()
ActivityCompat.invalidateOptionsMenu()
не отвечает onPrepareOptionsMenu();
, он просто обновляет меню напрямую. Просто поместите некоторые Log.d()
и проверьте сами.
Это работает для меня (я использую API 8):
private Menu mMenu;
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
inflater.inflate(R.menu.track_fragment, menu);
mMenu = menu;
}
...
private void someMethod() {
...
if (mMenu != null) {
MenuItem item = mMenu.findItem(R.id.new_track);
if (item != null) {
item.setVisible(false);
ActivityCompat.invalidateOptionsMenu(this.getActivity());
}
}
...
}
My someMethod()
вызывается из нескольких мест, даже до onCreateOptionsMenu()
, поэтому я должен проверить mMenu != null
.
Это вернет true, если API выше или равен 11 и поэтому поддерживается. Перед API 11 меню вызывается при нажатии кнопки меню, поэтому нет необходимости в этом методе, поскольку он возникает автоматически.