After the rotate, onCreate() Fragment is called before onCreate() FragmentActivity After the rotate, onCreate() Fragment is called before onCreate() FragmentActivity android android

After the rotate, onCreate() Fragment is called before onCreate() FragmentActivity


You should not count on a valid Activity until the onActivityCreated() call in the Fragment's life cycle.

Called when the fragment's activity has been created and this fragment's view hierarchy instantiated. It can be used to do final initialization once these pieces are in place, such as retrieving views or restoring state.

The exact reasons why the rebuild order is not linear, I cannot tell you. It is probably more efficient to allow each component to re-start at its own pace rather than forcing a rigid order. For instance, I prefer that my LoaderManager starts as early as possible and we'll worry about the layout for it's content later.

(I love a good diagram.)

enter image description here


Fragments are restored during the Activity's onCreate(). Importantly though, they are restored in the base Activity class's onCreate(). Thus if you call super.onCreate() first, all of the rest of your onCreate() method will execute after your Fragments have been restored.

One possible solution then is to restore your state or calculate what ever data it is your Fragment's will need BEFORE you call super.onCreate()

The life cycle looks like this:

ACTIVITY onCreate (pre-super)FRAGMENT onAttachACTIVITY onCreate (post-super)

So do something like this:

@Overridepublic 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)" );}