studio reales proyectos programacion para intuitivas introducción incluye guia fuente código crear con como biblia aplicaciones android nullpointerexception menuitem runtimeexception

reales - manual de java para android



Establecer un elemento del menú como se comprueba desde el código (2)

No puede hacer findViewById() para un menú, porque es un menú, no una vista. Y puede cambiar el estado del menú cuando se está creando o preparando. Por ejemplo, si crea un menú de opciones, puede hacerlo en el método Activity: onPrepareOptionsMenu() :

@Override public boolean onPrepareOptionsMenu(Menu menu) { super.onPrepareOptionsMenu(menu); menu.findItem(R.id.sort_by_name).setChecked(true); //Also you can do this for sub menu menu.getItem(firstItemIndex).getSubMenu().getItem(subItemIndex).setChecked(true); return true; }

Tengo una aplicación de Android con el siguiente elemento de menú en una de las Actividades (que se refiere al manejo de una lista de nombres y números de mac):

<item android:id="@+id/menu_sort_tagg" android:icon="@android:drawable/ic_menu_sort_by_size" android:title="@string/menu_sort_list" > <menu> <group android:checkableBehavior="single"> <item android:id="@+id/sort_by_name" android:title="@string/sort_by_name" /> <item android:id="@+id/sort_by_mac" android:title="@string/sort_by_mac" /> </menu> </item>

y a medida que cambia el estado de la aplicación, quiero poder verificar previamente qué elemento en la lista de opciones de clasificación que se usó la última vez con el siguiente código:

((MenuItem)findViewById(R.id.sort_by_name)).setChecked(true);

El problema es que esta línea específica me da una excepción de tiempo de ejecución. ¿Alguien tiene una idea de por qué?

Un vistazo al registro revela que las excepciones de tiempo de ejecución se activan mediante una excepción de puntero nulo. Al cambiar el código de esta manera:

MenuItem mi = (MenuItem)findViewById(R.id.sort_by_name); mi.setChecked(true);

queda claro que la excepción se produce en los segundos, es decir, el elemento de menú mi es nulo. Entonces, ¿por qué falla la primera declaración para llevar un puntero al elemento de menú correcto?


private boolean _isHidden = false; @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.hiddenfiles: if(!_isHidden) { _isHidden = true; item.setChecked(true); } else { _isHidden = false; item.setChecked(false); } } return super.onOptionsItemSelected(item); }

  • Puede utilizar este código uno o varios menuitems.

  • Simplemente use ''item'' de ''public boolean onOptionsItemSelected (elemento MenuItem )''

  • Utilicé esto, que funcionó para mí. :)