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.

  • Extensible lista-vista de Android, establecer personalizado drawables
  • Actualizar la posición de la vista debajo de otra vista en Android
  • imagen de ajuste de androide en imagen
  • Animación de una vista mientras que ListView no está funcionando
  • Android recibe actividad de alojamiento desde una vista
  • Problema de estilo al superponer getDropDownView en ArrayAdapter
  • EditText setOnFocusChangeListener en todos los EditTexts
  • Google ya no permite el uso de WebView. ¿Cuáles son las alternativas?
  • ¿Cómo uso ResourceCursorTreeAdapter con vistas de grupo expandidas y contraídas en Android?
  • Agregar Haga clic en Evento en la lista expandible Vea al nino mientras extiende la actividad en lugar de la actividad?
  • Proper onDestroy () / Cómo evitar fugas de memoria
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.