onattach - navegar entre fragments android studio
Después de rotar, se llama a onCreate() Fragment before onCreate() FragmentActivity (2)
Estoy usando FragmentActivity y Fragments.
Cuando la aplicación comienza:
FragmentActivity onCreate() <------
FragmentActivity onStart()
FragmentActivity onResume()
Fragment onAttach()
Fragment onCreate() <------
Fragment onCreateView()
Fragment onActivityCreated()
Fragment onStart()
Fragment onResume()
Todo está bien, se llama a FragmentActivity onCreate () antes de Fragment onCreate (). Y cuando giro:
Fragment onPause()
FragmentActivity onPause()
Fragment onStop()
FragmentActivity onStop()
Fragment onDestroyView()
Fragment onDestroy()
Fragment onDetach()
FragmentActivity onDestroy()
---
Fragment onAttach()
Fragment onCreate() <----------
FragmentActivity onCreate() <---------
Fragment onCreateView()
Fragment onActivityCreated()
Fragment onStart()
FragmentActivity onStart()
FragmentActivity onResume()
Fragment onResume()
Se llama a Fragment onCreate () antes de FragmentActivity onCreate (). ¿Por qué es inconsistente?
En FragmentActivity onCreate () genero algunos datos, que obtiene Fragment onCreate (). Debido a ese extraño comportamiento tuve que mover mi código de Fragment onCreate () a Fragment onCreateView () para asegurarme de que mis datos habían sido generados antes.
Estoy usando FragmentStatePagerAdapter para contener Fragments, ¿quizás esa es la razón?
Los fragmentos se restauran durante la Actividad onCreate()
. Sin embargo, es importante destacar que se restauran en la clase de actividad base onCreate()
. Por lo tanto, si llama super.onCreate()
a super.onCreate()
, todo el resto de su método onCreate()
se ejecutará después de que se hayan restaurado sus Fragmentos.
Una posible solución es restablecer su estado o calcular los datos que su Fragmento necesitará ANTES de llamar a super.onCreate()
El ciclo de vida se ve así:
ACTIVITY onCreate (pre-super)
FRAGMENT onAttach
ACTIVITY onCreate (post-super)
Entonces haz algo como esto:
@Override
public void onCreate( final Bundle savedInstanceState )
{
Log.d( TAG, "ACTIVITY onCreate (pre-super)" );
// Do your processing here
super.onCreate( savedInstanceState ); // Fragments will be restored here
Log.d( TAG, "ACTIVITY onCreate (post-super)" );
}
No debe contar con una Actividad válida hasta la llamada onActivityCreated()
en el ciclo de vida del Fragmento.
Se invoca cuando se ha creado la actividad del fragmento y se ha instanciado la jerarquía de vistas de este fragmento. Se puede usar para realizar la inicialización definitiva una vez que estas piezas están en su lugar, como recuperar vistas o restaurar el estado.
Las razones exactas por las que el orden de reconstrucción no es lineal, no puedo decírtelo. Probablemente sea más eficiente permitir que cada componente se reinicie a su propio ritmo en lugar de forzar una orden rígida. Por ejemplo, prefiero que mi LoaderManager comience tan pronto como sea posible y luego nos preocuparemos por el diseño de su contenido.
(Me encanta un buen diagrama.)