para - mostrar menu android
Android invalidateOptionsMenu() para API<11 (3)
ActivityCompat.invalidateOptionsMenu(MainActivity.this);
para que mi elemento de menú "actualizar" pueda habilitarse / deshabilitarse automáticamente sin utilizar la opción "Menú" (imagine que el usuario deja el Menú abierto ... Necesito que el elemento de menú "Actualizar" se deshabilite automáticamente y se habilite a sí mismo) )
ActivityCompat.invalidateOptionsMenu(MainActivity.this)
funciona bien en Android 11+. ¿Pero qué puedo usar para Android API <11? : S He buscado mucho pero no puedo encontrar una respuesta. ¿Puede alguien ayudarme en esto?
Esto funciona bien en Android API 11+, usando onPrepareOptionsMenu
y ActivityCompat.invalidateOptionsMenu(MainActivity.this)
. El problema es tratar de hacerlo en Android API <11.
Aquí está mi método onPrepareOptionsMenu
:
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
if(menuRefreshEnable){
menu.getItem(0).setEnabled(true);
}
if(!menuRefreshEnable){
menu.getItem(0).setEnabled(false);
}
return true;
}
En API < 11
use el método supportInvalidateOptionsMenu()
Esto se devolverá verdadero si la API es superior o igual a 11 y, por lo tanto, es compatible. Antes de API 11, el menú se dibuja cuando se presiona el botón de menú, por lo que no hay necesidad de este método, ya que ocurre automáticamente.
ActivityCompat.invalidateOptionsMenu()
no realiza una devolución de llamada onPrepareOptionsMenu();
simplemente actualiza el menú directamente. Simplemente ponga Log.d()
y eche un vistazo por su cuenta.
Esto funciona para mí (estoy usando 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());
}
}
...
}
Mi someMethod()
se llama desde varios lugares, incluso antes de onCreateOptionsMenu()
, así que debo marcar mMenu != null
.