Ocultar menú de opciones en PreferenceFragment

Tengo una aplicación con varios fragmentos.

Sólo un fragmento tiene un menú de opciones. Un fragmento podría ser iniciado a partir del fragmento B (que extiende listfragment).

Así que el fragmento B no tiene un menú de opciones, si selecciono algún elemento de él, el fragmento A se iniciará con un menú de opciones y si regresa, el fragmento B todavía no tiene un menú de opciones.

El problema es si selecciono el menú Configuración (que extiende el fragmento de preferencia) desde el cajón de navegación mientras mi ventana actual es el fragmento A, un fragmento de configuración se mostrará con el menú de opciones del fragmento A. Pero si selecciono el menú Configuración del cajón de navegación mientras mi ventana actual Es el fragmento B, C, D (sin menú de opciones) todo funciona bien.

Fragmento A:

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

Fragmento de configuración:

 @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setHasOptionsMenu(true); sharedPreferenceSettings = new SharedPreferenceSettings(getActivity()); addPreferencesFromResource(R.xml.settings); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { return inflater.inflate(R.layout.fragment_settings, container, false); } 

¿Dónde está el problema?

EDITAR:

Después de horas de depuración encontré una solución. El problema era fragmentManager diferente para la transacción de fragmentos. Para el fragmento de ajustes solo usé getSupportFragmentManager (), para otros – fragmentManager (). Esto hace que algunos fragmentos se muevan a la pila trasera.

Veo dos sospechosos de código. Sugerencia de código para el fragmento A:

 @Override public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { inflater.inflate(R.menu.menu_station, menu); super.onCreateOptionsMenu(menu, inflater); } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setHasOptionsMenu(true); ... } 

Notas:

  • super.onCreateOptionsMenu() normalmente se llama después de inflar. Esto no está bien documentado, así que no estoy seguro de cuál es la diferencia. Un post relacionado de SO que muchos acuerdan como la mejor respuesta es @ Menú de Opciones de Android en Fragmento .
  • setHasOptionsMenu(true) se realiza en el mismo fragmento en lugar del fragmento Settings. Fragmentos guardar sus propios datos y estados. No puedes modificar estados entre fragmentos tan fácilmente.

De la lectura de su mensaje, creo que debe utilizar un diseño de fragmento temporal para ser reemplazado por el fragmento deseado. Sugerencia de código:

 FragmentManager fragManager = this.getSupportFragmentManager(); MyFragment myFragment = MyFragment.newInstance(); FragmentTransaction fragmentTransaction = fragManager.beginTransaction(); FragmentTransaction transaction = this.getSupportFragmentManager().beginTransaction(); transaction.replace(R.id.sample_content_fragment, myFragment, "MyFrag"); transaction.addToBackStack(null); // support the Back key transaction.commit(); 

En el Layout :

 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/sample_main_layout" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > ... <FrameLayout android:id="@+id/sample_content_fragment" android:layout_width="match_parent" android:layout_height="match_parent" /> ... </LinearLayout> 

Notas:

  • El diseño del fragmento temporal se denomina sample_content_fragment . Este es el contenedor principal para mantener una pila de fragmentos.
  • Esta técnica utiliza sólo una pila de fragmentos para administrar en lugar de varias pilas.
  • Cómo cambiar el icono de navegación de la barra de herramientas y el margen del menú de opciones
  • Advertencia al cancelar el menú de desbordamiento de ActionBar en Android 4.1.x
  • Android actionLayout no se muestra con la barra de herramientas
  • Problema con Android OptionsMenu, el fondo siempre es transparente
  • No se puede acceder a android / drawable Icon-Resource
  • OpenOptionsMenu () no funcionará en appcompat-v7 22.1.0 o posterior
  • El menú de opciones que no se muestra en ICS utilizando la biblioteca de compatibilidad
  • Android - Uso correcto de invalidateOptionsMenu ()
  • El menú de opciones se bloquea en la galaxia s4
  • OpcionesMenú de fragmentos en Viewpager mostrando los botones del otro
  • Ajustar el icono al grupo en el menú de opciones
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.