OpcionesMenú de fragmentos en Viewpager mostrando los botones del otro

Tengo tres fragmentos en un viewpager.

Dos de estos fragmentos tienen su propia versión del método onCreateOptionsMenu:

@Override public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { super.onCreateOptionsMenu(menu, inflater); // Set up 1 action button inflater.inflate(R.menu.home_snapshot_add, menu); } @Override public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { super.onCreateOptionsMenu(menu, inflater); // Set up 2 action buttons inflater.inflate(R.menu.home_snapshot_send, menu); } 

La actividad en el hogar tiene un método básico onCreateOptionsMenu:

  @Override public boolean onCreateOptionsMenu(Menu menu) { return false; } 

En el método onCreate, cada fragmento llama al método:

 setHasOptionsMenu(true); 

Cada uno de los elementos del menú tiene la etiqueta:

 android:showAsAction="always" 

Parece que al abrir la Actividad, aparecen los tres botones. Sin embargo, cuando me desplazo a través de ellos, los malos mágicamente desaparecen. Parece que la actividad está llamando cada menú de opciones de Fragmento en la creación de actividad y luego cambia el menú apropiadamente cuando deslizo hacia la izquierda y la derecha. He comprobado los menús, pero no estoy seguro de lo que está mal. ¿Algo que creas que debo comprobar? Estoy un poco sin ideas.

¡Gracias!

En ViewPager de OnPageChangeListener y después de configurar el adaptador en ViewPager , ViewPager lo siguiente:

 @Override public void onPageSelected(int position){ invalidateFragmentMenus(position); } private void invalidateFragmentMenus(int position){ for(int i = 0; i < mViewPagerFragentAdapter.getCount(); i++){ mViewPagerAdapter.getItem(i).setHasOptionsMenu(i == position); } invalidateOptionsMenu(); //or respectively its support method. } 

Después de configurar su adaptador de fragmento, llame al mismo método con el siguiente argumento:

 invalidateFragmentMenus(mViewPager.getCurrentItem()); 

Las declaraciones anteriores evitarán que todos los demás fragmentos no reciban llamada en el método onCreateOptionsMenu() cuando se onCreateOptionsMenu() invalidateOptionsMenu() , sólo el fragmento visible actualmente recibirá y podrá rellenar el menú de opciones.

He utilizado esto y ha funcionado para mí:

 //In your Fragment @Override public void onResume() { super.onResume(); setHasOptionsMenu(isVisible()); } 
  • Hacer clic en icono de hamburguesa en la barra de herramientas no abre Cajón de navegación
  • ¿Cómo diseñar el Overflow de Barras de Acción en dispositivos con un botón de menú de hardware?
  • OnCreateOptionsMenu () llamando a super
  • ¿Cómo implemento el método onCreateOptionsMenu en un SherlockFragment?
  • Volver a usar el código del menú Opciones
  • ¿Cómo cambiar el icono del menú de opciones en la barra de acción?
  • No se puede acceder a android / drawable Icon-Resource
  • Color de fondo del menú de opciones de la barra de herramientas
  • Creación de un menú de opciones emergentes en una barra de acción contextual
  • No se muestra ningún icono en el elemento de menú Opciones de Android
  • Cómo ocultar OptionsMenu en NavigationDrawer utilizando Fragmentos?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.