Android: Fragment's new getContext() method is which context?
Short answer
Fragment.getContext()
return the context of activity where fragment is used
Details
Since api 23 in Fragment
class was introduced mHost
field
// Activity this fragment is attached to.
FragmentHostCallback mHost;
And Fragment.getContext()
uses it for getting context:
/**
* Return the {@link Context} this fragment is currently associated with.
*/
public Context getContext() {
return mHost == null ? null : mHost.getContext();
}
There are several steps before you get Activity's context in fragment's getContext()
method.
1) During Activity's initialization FragmentController
is created:
final FragmentController mFragments = FragmentController.createController(new HostCallbacks());
2) It uses HostCallbacks
class (inner class of Activity
)
class HostCallbacks extends FragmentHostCallback<Activity> {
public HostCallbacks() {
super(Activity.this /*activity*/);
}
...
}
3) As you can see mFragments
keep the reference to the activity's context.
4) When the application creates a fragment it uses FragmentManager
. And the instance of it is taken from mFragments
(since API level 23)
/**
* Return the FragmentManager for interacting with fragments associated
* with this activity.
*/
public FragmentManager getFragmentManager() {
return mFragments.getFragmentManager();
}
5) Finally, the Fragment.mHost
field is set in FragmentManager.moveToState(Fragment f, int newState, int transit, int transitionStyle, boolean keepActive)
method.