Tener dos grupos de una sola selección en ActionBar no funciona, pero adjuntar un menú emergente en su lugar no funciona bien

Estoy escribiendo una aplicación de Android donde el usuario debe elegir cómo y qué mostrar en un gráfico. Estas opciones se expresan en dos grupos de menú de selección única (botones de radio), los cuales deben ser accesibles desde la barra de acción.

El primer grupo funciona bien. Se agrega al final de mi XML de ActionBar así:

<group android:checkableBehavior="single" android:showAsAction="never" > <item android:id="@+id/menu_choice_1" android:title="Choice 1" /> <item android:id="@+id/menu_choice_2" android:title="Choice 2" android:checked="true"/> </group> 

Sin embargo, cuando añado un segundo <group> debajo del primero, los dos se combinan en una sola selección. En otras palabras, las opciones de ambas listas se procesan juntas y si elijo una opción perteneciente a la primera lista, no puedo elegir nada de la segunda.

En su lugar, quiero dos listas separadas de botones de radio. Mi siguiente idea fue añadir otro botón a la ActionBar que, al hacer clic, lanzaría un menú emergente . Pero cuando hago clic en el botón, obtengo una IllegalStateException , diciendo que mi "MenuPopupHelper no se puede usar sin un ancla".

Aquí está mi código de menú emergente:

En mi XML de ActionBar:

 <item android:id="@+id/menu_openothermenu" android:title="@string/openothermenustr" android:showAsAction="always" /> 

Mi nuevo menú XML:

 <?xml version="1.0" encoding="utf-8"?> <menu xmlns:android="http://schemas.android.com/apk/res/android"> <group android:checkableBehavior="single"> <item android:id="@+id/menu_2_choice_1" android:title="@string/2_choice_1" /> <item android:id="@+id/menu_2_choice_2" android:title="@string/2_choice_2" android:checked="true"/> </group> </menu> 

Código en mi actividad:

 @Override public boolean onOptionsItemSelected(MenuItem item) { SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0); SharedPreferences.Editor editor; switch (item.getItemId()) { case R.id.openothermenu: Menu m = (Menu) findViewById(R.menu.other_menu); PopupMenu popup = new PopupMenu(this, findViewById(R.menu.main_menu)); popup.setOnMenuItemClickListener(this); MenuInflater inflater = popup.getMenuInflater(); inflater.inflate(R.menu.other_menu, popup.getMenu()); /* This commented block doesn't work either, and prevents execution // Restore saved chosen value int chosen = settings.getInt(MENU_2_PREFS, -1); switch(chosen) { case 1: m.findItem(R.id.menu_1_choice_1).setChecked(true); updateVisibleThings(); break; default: case 2: m.findItem(R.id.menu_2_choice_2).setChecked(true); updateOtherVisibleThings(); break; } */ popup.show(); return true; default: return super.onOptionsItemSelected(item); } } @Override public boolean onMenuItemClick(MenuItem item) { SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0); SharedPreferences.Editor editor; switch(item.getItemId()) { case R.id.menu_2_choice_1: if (item.isChecked()) item.setChecked(false); else item.setChecked(true); updateVisibleThings(); // save chosen setting editor = settings.edit(); editor.putInt(MENU_2_PREFS, 1); editor.commit(); // Commit the edits! return true; case R.id.menu_2_choice_2: if (item.isChecked()) item.setChecked(false); else item.setChecked(true); updateOtherVisibleThings(); // save chosen setting editor = settings.edit(); editor.putInt(MENU_2_PREFS, 2); editor.commit(); // Commit the edits! return true; default: return true; } } 

¿Cómo puedo crear dos conjuntos de elementos de menú verificables de tal manera que ambos se adjunten a la ActionBar?

Encontré una manera elegante de solucionar esto que desafortunadamente no estaba en la documentación. Agregue el código siguiente al menú XML de ActionBar:

 <item android:id="@+id/menu_openothermenu" android:title="@string/openothermenustr" android:showAsAction="always"> <menu> <group android:checkableBehavior="single"> <item android:id="@+id/menu_2_choice_1" android:title="@string/2_choice_1" android:showAsAction="never" /> <item android:id="@+id/menu_2_choice_2" android:title="@string/2_choice_2" android:showAsAction="never" android:checked="true" /> </group> </menu> </item> 

No es necesario ningún código de manejador adicional ni implementación del menú emergente para que aparezca un menú de este tipo.

  • Selección de varios valores de la lista desplegable
  • Styling Sherlock Barra de Acción desplegable artículos
  • Selector de ícono, subtítulo y lista desplegable de la barra de acción de Android
  • Desplazamiento del menú desplegable sobre el teclado en autocompletetextview
  • Android: Barra de acción de Sherlock desplegable
  • Color de texto de Android Spinner
  • Menú desplegable en android
  • ¿Cómo cambiar la posición de la ruleta abierta?
  • Configuración de valores y visualización de texto en Android Spinner
  • Clasificación de ArrayAdapter para Android
  • Cómo agregar DropDown en la aplicación de Android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.