Android invalidateOptionsMenu() для API < 11
Я использовал ActivityCompat.invalidateOptionsMenu(MainActivity.this);
так, чтобы мой пункт меню "обновить" мог автоматически включаться / отключаться без необходимости касаться опции "Меню" (представьте, что пользователь оставляет меню открытым... Мне нужно, чтобы пункт меню "Обновить" автоматически отключился и включился сам).
ActivityCompat.invalidateOptionsMenu(MainActivity.this)
отлично работает в Android 11+. Но что я могу использовать для Android API < 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;
}
3 ответа
На 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());
}
}
...
}
мой someMethod()
Вам звонят из нескольких мест, даже до onCreateOptionsMenu()
так что я должен проверить mMenu != null
,
Это вернет true, если API выше или равен 11 и поэтому поддерживается. До API 11 меню отображалось при нажатии кнопки меню, поэтому в этом методе нет необходимости, поскольку он происходит автоматически.