código de menú Android no funciona

He estado tratando de descubrir por qué mi boolean no cambia cuando presiono el botón, cuando lo cambié manualmente funcionó, pero no hace nada. Intenté seguir tutoriales a la palabra, pero no funcionan. ¿Alguien puede señalar dónde me estoy equivocando?

public boolean onOptionsItemSelected(MenuItem menu) 
{
    MenuItem freeze = (MenuItem)findViewById(R.id.freeze);  
   //Handle item selection 
    switch (menu.getItemId()) { 
        case R.id.freeze: 
            if (freze == false){
                freze = true;
            } else {
                freze = false;
            }
            return true; 
        case R.id.toggleVolCount: 
            if (toggleVol == true){
                toggleVol = false;
            } else {
                toggleVol = true;
            }
            return true; 
        default: return super.onOptionsItemSelected(menu); 
    } 

Gracias por toda su ayuda, cuando probé el código que se sugirió y no funcionó, volví y cambié el menú. Previamente había hecho un botón con un onClick para crear el menú, cuando creé el ícono con código, el código que había escrito previamente funcionó bien. Espero que esto ayude a alguien que no sea yo, así que no me siento tan idiota.}

2
agregado el autor Praveenkumar, fuente
Creo que es un error tipográfico congelar! = freze
agregado el autor 2619, fuente
No saltemos a conclusiones. En el código anterior, 'freze' bien puede ser (y probablemente sea) un miembro booleano de la clase contenedora deletreada de manera diferente de 'congelar' para evitar una colisión con la variable local en el método (aunque yo personalmente prefiero usar el presente- palabra clave en situaciones similares).
agregado el autor Kallja, fuente
@ user1462846 Podría publicar su definición de menú xml (o código de creación si lo está haciendo de esa manera). ¿Ha verificado dos veces que está utilizando los ID correctos con sus elementos de menú?
agregado el autor Kallja, fuente
@droids Ese no es el problema aquí. La instrucción switch usa el tipo prim prim, que de hecho se pasa por valor. Además, la plataforma Android ofrece ciertas garantías sobre los objetos devueltos por findViewById (int) -method.
agregado el autor Kallja, fuente
Quiere decir freeze , no freze . Eso te daría un error de compilación, así que supongo que es un error tipográfico.
agregado el autor keyser, fuente
en Java, todos los tipos siguen el valor de paso por valor. Creo que esa es la razón por la que enfrentas este problema.
agregado el autor Zombie, fuente
@Jarkko agradece por tomarse el tiempo para explicar. Dado que la pregunta no es tan clara, pensé que el valor booleano freze no está logrando que los cambios realizados dentro del interruptor pasen a estar fuera de la declaración de cambio y lo comenté. de todos modos, fue útil para mí en la comprensión.
agregado el autor Zombie, fuente

1 Respuestas

En la carpeta res, crea un menú de carpeta como dibujable

Cree un nuevo archivo xml optionmenu.xml en esa carpeta.

<?xml version="1.0" encoding="utf-8"?>
 

En el método onCreate escribe este código ...

setOptionMenu(R.menu.optionmenu);

y en el método de menú adicional escribe este código .....

@Override
    public boolean onOptionsItemSelected(MenuItem menu) {
        switch (menu.getItemId()) {
        case R.id.menuitem:
            startActivity(new Intent(this, Prefs.class));
            break;

case R.id.menuitem1:
            startActivity(new Intent(this, Prefs1.class));
            break;
        default:
            break;
        }

        return true;
    }
1
agregado