2011-12-12 15 views
12

Tengo un diseño que tiene 2 fragmentos. Estos fragmentos usan el mismo menú, porque tengo otros diseños que tienen solo uno de estos (utilizado en dispositivos de pantalla pequeña).Fragmentos, con el mismo menú, en el mismo diseño causan menú duplicado

Mi problema es que los elementos del menú de cada fragmento se muestran en el menú, y dado que son del mismo menú, se duplican entre sí. Necesito mostrar solo el menú de un fragmento, no ambos. ¿Hay alguna forma de que pueda archivar esto?

O, probablemente sea mejor, cree 2 menús diferentes. Uno para los diseños que tiene uno de estos fragmentos solo (que se usa en dispositivos de pantalla pequeña) y otro para el diseño que tiene ambos fragmentos. Cómo podría hacer esto ?

Editar: Uso la biblioteca ActionBarSherlock para compatibilidad con versiones anteriores, y la pruebo en el emulador de Android 3.0.

Respuesta

0

¿llama al método super de createOptionMenu?

  • entonces puede suceder que se muestren todos los optionmenus.
+0

Sí, se llama a createOpionMenu del super. –

+0

y luego no llames al supermétodo :) – alosdev

+4

bueno, eso empeoraría el problema, creo ;-) –

21

He encontrado la solución no tan buena. En onCreateOptionsMenu() de cada fragmento, llame a menu.clear() para eliminar cualquier elemento de menú existente antes de inflar el menú.

@Override 
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { 
    menu.clear(); 
    inflater.inflate(R.menu.main, menu); 
    super.onCreateOptionsMenu(menu, inflater); 

} 

Esto publicaría los problemas futuros. Puedo decidir utilizar diferentes menús para cada fragmento, que cada menú comparte elementos del menú. Creo que podemos manipular el menú en onCreateOptionsMenu(), pero actualmente no sé cómo obtener el elemento del menú asociado con el fragmento antes de inflarlo con MenuInflater.

+0

¿Alguna vez descubriste una solución para esto? Actualmente me encuentro con esto, también. –

+0

Esto ... funcionó para mí ... eh .... –

+0

nullpointerexception en onPrepareOptionsMenu de FragmentActivity.Por favor, avise – Umesh

2

Llego tarde, pero tal vez pueda ayudar a otros. Esto suena como un olor de diseño (si este término existe).

Si ambos fragmentos tienen elementos del mismo menú, y no importa qué elementos del fragmento se utilizan (es decir, no hace ninguna diferencia si hace clic en el elemento 1 del fragmento A, o el elemento 1 del fragmento B), entonces probablemente el menú no debe ser parte del fragmento, sino de la actividad. Eso resolvería la duplicación.

+0

El problema es que la duplicación también ocurre cuando se cambia la configuración y tener una interacción más detallada con la barra de acción sería muy útil. esto no es solo un problema de olor de diseño. – dcow

+0

Sí, un escenario común es una acción de eliminación que debe aparecer tanto para el menú de pulsación larga en la lista maestra como para la pantalla de detalles para un elemento. El elemento de menú de la barra de acciones solo debe rellenarse con el fragmento de detalles, mientras que el elemento de menú de pulsación larga solo se muestra cuando se presiona largamente. – Monstieur

0

Encontré un trabajo que funcionaba para mí. En el método onOptionsItemSelected, primero hago el cheque si la clase de su igual o no a la clase que recibo de la fragmentManager con findFragmentById (R.id.content_frame) .getClass()

que tiene algo como esto

@Override 
    public boolean onOptionsItemSelected(MenuItem item) {   
     if(this.class != getFragmentManager().findFragmentById(R.id.content_frame).getClass()) { 
      return false; // must do nothing 
     } 
     // do your menu stuff 
    } 
Cuestiones relacionadas