Android invalidateOptionsMenu () для API
Я ActivityCompat.invalidateOptionsMenu(MainActivity.this);
чтобы мой пункт меню " обновить "мог автоматически включаться/отключаться без использования опции" меню " (представьте, что пользователь оставляет меню открытым... Мне нужно, чтобы пункт меню "обновить"автоматически отключился и включился).
на ActivityCompat.invalidateOptionsMenu(MainActivity.this)
отлично работает в Android 11+. Но что я могу использовать для Android API
это отлично работает в Android API 11+, используя onPrepareOptionsMenu
и ActivityCompat.invalidateOptionsMenu(MainActivity.this)
.
Проблема пытается сделать это в Android API
вот мой onPrepareOptionsMenu
способ:
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
if(menuRefreshEnable){
menu.getItem(0).setEnabled(true);
}
if(!menuRefreshEnable){
menu.getItem(0).setEnabled(false);
}
return true;
}
3 ответов
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());
}
}
...
}
мой someMethod()
вызывается из нескольких мест, даже перед onCreateOptionsMenu()
, поэтому я должен проверить mMenu != null
.
Это вернет true, если API выше или равен 11 и, следовательно, поддерживается. Перед API 11 меню рисуется при нажатии кнопки меню, поэтому нет необходимости в этом методе, поскольку он происходит автоматически.