Llamar setHasOptionsMenu (true) de un fragmento da como resultado múltiples llamadas a onCreateOptionsMenu en Activity

Tengo una Activity simple que contiene un ViewPager . Estoy tratando de agregar algunos elementos de menú al menú de uno de mis Fragment s, sin embargo, estoy recibiendo un comportamiento extraño. Llamada: setHasOptionsMenu(true); De mi fragmento da como resultado el método onCreateOptionsMenu() la Actividad de onCreateOptionsMenu() que se llama cada vez que cambio fragmentos en ViewPager . ¿Esto es normal?

Es absolutamente "normal". Es posible que no encaje con su caso de uso en particular, pero es definitivamente un comportamiento intencionado.

Echa un vistazo a la fuente de android.support.v4.app.Fragment.setHasOptionsMenu ():

 public void setHasOptionsMenu(boolean hasMenu) { if (mHasMenu != hasMenu) { mHasMenu = hasMenu; if (isAdded() && !isHidden()) { mActivity.supportInvalidateOptionsMenu(); } } } 

Usted puede ver que llama a supportInvalidateOptionsMenu() en su actividad, lo que finalmente lleva a onCreateOptionsMenu() ser llamado en la actividad y todos sus fragmentos. Es cómo el marco administra la actualización del menú de opciones cuando se agrega o quita un fragmento del gestor de fragmentos de una actividad.

  • No es un archivo DRM, abriendo notmally
  • Aplicar una máscara a una sola vista de superposición sin enmascarar toda la actividad
  • ¿Cómo encontrar id de la vista en appwidgetprovider?
  • Ajustar dinámicamente la altura de los encabezados de grupo en un ExpandableListView
  • Android: icono del indicador de cambio y tamaño de la lista expandible utilizada para la navegación
  • Android notifyDataSetChanged para ExpandableListView no funciona
  • Arquitectura de la GUI de Android - relación entre Superficie / vista / ventana / lienzo
  • Personalizar el indicador TabLayout. ¿Haciendo la esquina de la esquina del indicador de la pestaña?
  • Acceso a TextView de viewview de groupview desde getChildView () de ExpandableListView
  • ¿Mostrar la vista por encima de la barra de estado?
  • Vista superficial en capas en un FrameLayout en Android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.