La documentation pour Fragment.getContext()
le dit
renvoie le contexte auquel le fragment est actuellement associé.
Il a été introduit dans api 23 http://developer.Android.com/reference/Android/app/Fragment.html#getContext ()
Est-ce la Application
ou Activity
Context
?
Réponse courte
Fragment.getContext()
retourne le contexte de l'activité où fragment est utilisé
Détails
Depuis que l’API 23 dans la classe Fragment
a été introduite dans le champ mHost
// Activity this fragment is attached to.
FragmentHostCallback mHost;
Et Fragment.getContext()
l'utilise pour obtenir le contexte:
/**
* Return the {@link Context} this fragment is currently associated with.
*/
public Context getContext() {
return mHost == null ? null : mHost.getContext();
}
Avant d'obtenir le contexte d'activité dans la méthode getContext()
de fragment, vous devez suivre plusieurs étapes.
1) Au cours de l'initialisation de l'activité, la variable FragmentController
est créée:
final FragmentController mFragments = FragmentController.createController(new HostCallbacks());
2) Il utilise la classe HostCallbacks
(la classe interne de Activity
)
class HostCallbacks extends FragmentHostCallback<Activity> {
public HostCallbacks() {
super(Activity.this /*activity*/);
}
...
}
3) Comme vous pouvez le constater, mFragments
conserve la référence au contexte de l'activité.
4) Lorsque l'application crée un fragment, elle utilise FragmentManager
. Et son instance est tirée de mFragments
(depuis le niveau 23 de l’API)
/**
* Return the FragmentManager for interacting with fragments associated
* with this activity.
*/
public FragmentManager getFragmentManager() {
return mFragments.getFragmentManager();
}
5) Enfin, le champ Fragment.mHost
est défini dans la méthode FragmentManager.moveToState(Fragment f, int newState, int transit, int transitionStyle, boolean keepActive)
.
En ce qui concerne FragmentActivity et inherited - 'getContext ()' retournera toujours le contexte d'activité, vous pouvez le voir si vous vérifiez le code source.