Establecer un elemento de menú tal como se ha comprobado desde el código

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 como el estado de la aplicación cambia, quiero ser capaz de pre-comprobar qué elemento en la lista de opciones de ordenación que se utilizó la última vez con el código siguiente:

 ((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 pista por qué?

Una mirada al registro revela que las excepciones de tiempo de ejecución son activadas por una excepción de puntero nulo. Cambiando el código de esta manera:

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

se hace evidente que la excepción se produce en la instrucción seconds, es decir, el MenuItem mi es nulo. Entonces, ¿por qué falla la primera instrucción para llevar un puntero al MenuItem correcto?

No puedes encontrar 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; } 
  • Errores de unmarshalling en la aplicación de Android con clases parcelables personalizadas
  • Enviar objeto desde el servicio a la actividad (no se puede marshal no parcelable)
  • ¿Qué está causando esto en android webView?
  • Error al cargar la biblioteca de ejecución en Android Studio
  • ¿Llamando startActivity () desde fuera de una Actividad?
  • Excepción de tiempo de ejecución extra cuando se ejecuta una aplicación de Android en algunos dispositivos
  • ¿Por qué se bloquea mi actividad al pulsar el botón de inicio?
  • BluetoothAdapter.getDefaultAdapter () lanzando RuntimeException mientras no está en Activity
  • Android RuntimeException onCreateDialog no creó un diálogo para id
  • Mostrar / ocultar el elemento en la barra de acciones Android (3.0+)
  • GdxRuntimeException en Android: no se pudo cargar la biblioteca compartida 'gdx' para el destino
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.