2011-11-26 25 views

Respuesta

129

Dado que las acciones se completan con el menú de opciones de la actividad, puede usar Activity#invalidateOptionsMenu(). Esto arrojará el menú actual y llamará nuevamente a los métodos onCreateOptionsMenu/onPrepareOptionsMenu de su actividad para reconstruirlo.

Si está utilizando pestañas de la barra de acciones para cambiar la configuración de su fragmento, hay una mejor manera. Haga que cada fragmento administre su propia porción del menú. Estos fragmentos deben llamar al setHasOptionsMenu(true). Cuando se agregan o eliminan fragmentos que tienen elementos del menú de opciones, el sistema invalidará automáticamente el menú de opciones y llamará a los métodos de onCreateOptionsMenu/onPrepareOptionsMenu de cada fragmento además de los de la actividad. De esta forma, cada fragmento puede administrar sus propios elementos y no necesita preocuparse por realizar el cambio de menú a mano.

+17

Sólo una nota: setHasOptionsMenu() debe ser llamado en onCreate de acuerdo con el [Documentación] (http://developer.android.com/guide/topics/fundamentals/fragments.html#ActionBar). – Dave

+1

Eso no es realmente un requisito. Se puede llamar desde allí y es un buen lugar para hacerlo en muchas circunstancias, pero si el fragmento ya se ha agregado y no está oculto, el menú de opciones de la actividad se invalidará y se reflejará el nuevo estado. – adamp

+2

Estoy de acuerdo con usted, sin embargo, los documentos no lo hacen sonar así. "Sin embargo, para que este método reciba llamadas, debe llamar a setHasOptionsMenu() durante onCreate() ...". Creo que quieren decir que debes llamar a setHasOptionsMenu() pero sin querer lo hicieron sonar como si onCreate() también fuera un requisito. – Dave

1

ActionMode.invalidate() hizo el truco. Hizo que se invoque nuevamente el onPrepareActionMode().

Activity#invalidateOptionsMenu() hicieron no causa del onPrepareActionMode() que se invoca cuando se utilizan elementos de la lista con selección múltiple.

+0

¿cómo obtengo actionmode? Solo tengo ActionBar – eugene

+0

El ActionMode es el primer parámetro en onPrepareActionMode (...): http: // goo.gl/tMyBx –

+0

Nunca escuché de onPrepareAction –

15

Activity.invalidateOptionsMenu() requiere API de nivel 11. Hay una solución simple que es compatible con versiones anteriores:

Añadir MenuItem al menú al principio, pero establezca su visibilidad a falsa. Conjunto visibilidad a cierto cuando se desee, usando MenuItem.setVisible()

+1

Gracias. Por si acaso ayuda a los demás ... Pon 'MenuItem refreshItem = menu.findItem (R.id.action_refresh); refreshItem.setVisible (false); 'en su' onCreateOptionsMenu' – AlvaroSantisteban

+0

@AlvaroSantisteban o '" android: visible "=" false "' en xml –

1

Activity.invalidateOptionsMenu() requiere API de nivel 11. El uso de la versión de la biblioteca de apoyo de la misma supportInvalidateOptionsMenu().

AppCompatActivity activity = (AppCompatActivity) getActivity(); 
activity.supportInvalidateOptionsMenu(); 
Cuestiones relacionadas