tutorial studio onattach navegar llamar fragments example entre dinamicos desde activity abrir android android-fragments oncreate android-fragmentactivity android-support-library

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.)