¿Es posible cambiar los elementos del menú de opciones mediante programación? ¿Alguien me puede dar un ejemplo por favor?
Además, quiero deshabilitar ciertos elementos para que no escuchen los clics, ¿es posible?
Cualquiera necesita cambiar las opciones del menú de forma dinámica:
private Menu menu;
// ...
@Override
public boolean onCreateOptionsMenu(Menu menu)
{
this.menu = menu;
getMenuInflater().inflate(R.menu.options, menu);
return true;
}
// ...
private void hideOption(int id)
{
MenuItem item = menu.findItem(id);
item.setVisible(false);
}
private void showOption(int id)
{
MenuItem item = menu.findItem(id);
item.setVisible(true);
}
private void setOptionTitle(int id, String title)
{
MenuItem item = menu.findItem(id);
item.setTitle(title);
}
private void setOptionIcon(int id, int iconRes)
{
MenuItem item = menu.findItem(id);
item.setIcon(iconRes);
}
menu
se haya configurado antes de intentar obtener unaMenuItem
salida. Por ejemplo, si tiene algo comoactionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS)
, las pestañas se cargan antes del menú, por lo que llamarhideOption
/showOption
dentroonTabSelected
da como resultado una excepción de puntero nulo.item.setVisible(false);
, el elemento solo se oculta cuando hago clic en el menú. Si utilizoinvalidateOptionsMenu();
el artículo no respondo al clic. Le agradecería que me ayudara con un problema similar al que me enfrento. stackoverflow.com/questions/54756799/…setVisible
estados a los que también debe llamar; de losetEnabled(false)
contrario, el elemento aún se puede invocar a través de su acceso directomenu.xml
poner en su archivo java
fuente
Como dijo Nikolay, haz eso en onPrepareOptionsMenu ().
Para los elementos del menú en la barra de acciones, debe invalidar el menú con
activity.invalidateOptionsMenu();
Esto se describe con más detalle aquí. ¿Cómo puedo actualizar la barra de acciones cuando onPrepareOptionsMenu cambió las entradas del menú?
fuente
Si tengo que cambiar el contenido de mi menú de opciones, lo hago durante el onMenuOpened (). Esto me permite verificar el estado de ejecución en el mismo momento en que el usuario accede al menú.
fuente
Para deshabilitar ciertos elementos:
fuente
item.setVisible(false);
, mi elemento solo se oculta cuando hago clic en el menú (tres puntos). Si utilizoinvalidateOptionsMenu();
algunos elementos no respondo al hacer clic. Agradezco que me ayuden con un problema similar al que me enfrento. stackoverflow.com/questions/54756799/…usando las siguientes líneas que he hecho para agregar los valores en el menú
prueba este trabajo como un encanto para mí.
fuente
Prueba este código:
fuente
invalidateOptionsMenu();
, mis elementos siempre visibles dejan de funcionar (me refiero a que los elementos no responden al clic). Agradezco que me ayuden con un problema similar al que me enfrento. stackoverflow.com/questions/54756799/…Puedes hacer algo simple como lo hice yo. Simplemente cambie el texto a lo que se necesita cuando se toca el elemento del menú. Necesitaba apagar y encender el sonido, además de poder realizar una acción tocándolo. Aquí está mi código:
audioOn y touchOn son valores booleanos marcados en otras partes del código. Espero que esto ayude.
fuente
puede realizar su tarea simplemente implementando como se muestra a continuación:
fuente
En caso de que tenga una BottomBar:
Entonces solo necesitas llamar:
fuente
Código Kotlin para acceder a los elementos del menú Opciones de la barra de herramientas mediante programación y cambiar el texto / icono, ..:
1-Tenemos nuestro elemento de menú en un archivo de elementos de menú como: menu.xml, código de muestra para esto:
2- Defina una variable para acceder al objeto de menú en clase:
3- Ponga sus iniciales en onCreateOptionsMenu:
4- Accede a los elementos del menú dentro de tu código o diversión:
fuente
fuente