Obtener una referencia a un niño Fragmento después de que el fragmento padre se ha recreado

A partir de Android 4.2, Android admite Fragmentos anidados . El doc no da muchas explicaciones con respecto a los ciclos de vida de Fragment anidados, pero por experiencia, parece que su ciclo de vida es realmente similar a Fragments "regulares".

Parece que hay una diferencia grande sin embargo: los Fragments niño no se restauran cuando se onCreate método del padre Fragment onCreate . Como consecuencia, parece imposible guardar / restaurar una referencia a un Fragment particular:

  • El uso de getChildFragmentManager.findFragmentByTag(String) devuelve siempre null en parent Fragment onCreate(Bundle) porque mActive es null .
  • Usar putFragment / getFragment resulta en una NullPointerException porque getFragment busca el tamaño de una ArrayList mActive nula.

Por lo tanto, mi pregunta es muy simple. ¿Hay una manera correcta de recuperar una referencia a un Fragment hijo en el método onCreate Fragment padre?

Creo que no se puede onCreate en el onCreate en que la vista no se construye en ese momento. Usted puede en onViewCreated() sin embargo. La lógica que he usado es:

  • Compruebe si hay estado guardado en onViewCreated() , si lo hay, trate de obtener el fragmento hijo
  • A continuación, compruebe si el fragmento secundario es nulo, si lo es, agregue utilizando el gestor de fragmentos secundarios.

Por "chequeo" me refiero a buscar el fragmento por id. Supongo que por etiqueta debería funcionar también.

AFAIK no puede obtener un fragmento secundario antes de restaurar o crear la jerarquía de vistas, pero podría hacer lo mismo en un momento posterior, por ejemplo en onActivityCreated()

¿Qué pasa con setRetainInstanceState (true) en tu fragmento? ¿Podría resolver su problema? Resolvió algunos problemas cuando tengo ChildFragments en un fragmento. Sólo tengo que mantener una referencia al fragmento de niño en el fragmento.

Pero siempre lo hice en onCreateView (). No estoy seguro si funcionará en onCreate ()

¿O quieres decir algo completamente diferente?

Usas FragmentPagerAdapter? Si no intenta FragmentPagerAdapter en lugar de FragmentStatePagerAdapter me di cuenta de que tienen algún error cuando se utiliza FragmentStatePagerAdapter cuando tengo nido de nivel 4. Lo siento mi inglés es pobre.

 @Override public void onCreate(Bundle savedInstanceState) { if (savedInstanceState != null) { mFragment1 = getFragmentManager().getFragment(savedInstanceState, STATE_Fragment1); mFragment2 = getFragmentManager().getFragment(savedInstanceState, STATE_Fragment2); mFragment3 = getFragmentManager().getFragment(savedInstanceState, STATE_Fragment3); } else { mFragment1 = SomeFragment.newInstance("param1"); mFragment2 = SomeFragment.newInstance("param2"); mFragment3 = SomeFragment.newInstance("param3"); } super.onCreate(savedInstanceState); mMyPagerAdapter = new MyPagerAdapter(getChildFragmentManager(), mFragment1, mFragment2, mFragment3); } @Override public void onSaveInstanceState(Bundle outState) { if (mFragment1 != null) { getFragmentManager().putFragment(outState, STATE_Fragment1, mFragment1); } if (mFragment2 != null) { getFragmentManager().putFragment(outState, STATE_Fragment2, mFragment2); } if (mFragment3 != null) { getFragmentManager().putFragment(outState, STATE_Fragment3, mFragment3); } super.onSaveInstanceState(outState); } 
  • Pruebas funcionales de Android Espresso con fragmentos
  • ViewPager en DialogFragment, IllegalStateException: Fragmento no tiene una vista
  • GetActionBar de Fragment con AppCompatLibrary
  • ChildFragmentManager java.lang.IllegalStateException: La actividad ha sido destruida
  • Google Analytics v4: los datos no aparecen en el panel de control
  • ¿Cómo entender un fragmento?
  • Enviar valores de la actividad ViewPager a un fragmento por paquete
  • Fragmento addToBackStack () y popBackStackImmediate () no funciona
  • Realizar una acción cuando el fragmento ha terminado correctamente la carga
  • OnSaveInstanceState () del fragmento nunca se llama
  • Diferencia y usos de onCreate (), onCreateView () y onActivityCreated () en fragmentos
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.