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:
- Cambiar el icono del menú de opciones en la barra de acciones dependiendo de un fragmento abierto
- OpenOptionsMenu () no funcionará en appcompat-v7 22.1.0 o posterior
- El menú de opciones de onCreate no se muestra en android 3.1
- Iconos del sistema Android semi-transparentes
- Cómo cambiar el icono de navegación de la barra de herramientas y el margen del menú de opciones
@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!
- El menú de opciones que no se muestra en ICS utilizando la biblioteca de compatibilidad
- Android: java.lang.IllegalArgumentException: Tipo de elemento de carga útil no válido
- configuración del color de fondo del panel de opciones del menú manualmente
- Barra de acción de Android: deshabilita el menú de opciones
- Cómo agregar el menú de opciones de barra de acciones en Fragmentos de Android
- Advertencia al cancelar el menú de desbordamiento de ActionBar en Android 4.1.x
- Usando invalidateOptionsMenu () con el sistema de inicio de sesión (Android)
- Android - cambia dinámicamente el menú de opciones, pero al inflar desde XML
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()); }
- Cómo obtener el color de fondo de la barra de estado para mostrar colorPrimaryDark
- ¿Hay alguna forma de hacer Snackbar persisten entre los cambios de actividad?