Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Activity onStart() being called before Fragment's onActivityCreated()

I'm having an issue where my fragment's onActivityCreated() method is being called after my activity's onStart() method is called. This seems to imply that my activity's onCreate() method is finishing after onStart()? That can't be the case ... Can it? When in my activity's lifecycle is my fragment's onActivityCreated() called? Furthermore, if I have multiple fragments, how can I control the order of the fragments' onActivityCreated() calls?

In my activity:

@Override
protected void onStart() {
    super.onStart();
    methodA(); // this is called ...
}

In my fragment:

    @Override
public void onActivityCreated(Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);
    methodB(); // ... before this
}
like image 649
GameKyuubi Avatar asked Jul 05 '15 16:07

GameKyuubi


1 Answers

onActivityCreated() method is being called after my activity's onStart() method is called

Remember that onActivityCreated() method just a callback for the fragment from activity.

This seems to imply that my activity's onCreate() method is finishing after onStart()? That can't be the case ... can it?

Wrong! Activity and fragment is separate, So onCreated() method in Activity and onActivityCreated() method in fragment could not be the same. As above, in Fragment it's just a callback mapping with activity state.

Let's have a look at this picture to have a better understanding. enter image description here

In Official document from Google: Activity onStart()

Called just before the activity becomes visible to the user. Followed by onResume() if the activity comes to the foreground, or onStop() if it becomes hidden.

Fragment callback: onActivityCreated()

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. It is also useful for fragments that use setRetainInstance(boolean) to retain their instance, as this callback tells the fragment when it is fully associated with the new activity instance. This is called after onCreateView(LayoutInflater, ViewGroup, Bundle) and before onViewStateRestored(Bundle).

The last one:

Furthermore, if I have multiple fragments, how can I control the order of the fragments' onActivityCreated() calls?

It's depend on which way you use to add your fragments to activity. Basically the order will be the order of added fragments.

like image 80
ThaiPD Avatar answered Oct 20 '22 04:10

ThaiPD