web-dev-qa-db-fra.com

Comment obtenir un objet d'application dans la classe fragment

Je change d'application mobile Android pour prendre en charge les tablettes et les téléphones mobiles. Pour cela je change ma classe d'activité en fragment. Dans ma classe d'activité, j'ai une instance de ma classe d'application créée comme suit:

appCtx = (UnityMobileApp) getApplication();

UnityMobileApp est ma classe d'application.

Maintenant, je veux créer la même instance dans ma classe fragment. Pouvez-vous m'aider, s'il vous plaît, à résoudre ce problème?

40
Rakesh Gourineni

Utilisez appCtx = (UnityMobileApp) getActivity().getApplication(); dans votre fragment.

97
biegleux

La méthode getActivity() peut avoir la possibilité de renvoyer null. Cela pourrait bloquer votre application. Il est donc prudent d’utiliser cette méthode dans la onActivityCreated(). Par exemple:

private UnityMobileApp appCtx;
.
.
...
@Override
public View onCreateView(...){
...
}

@Override public void onActivityCreated(Bundle savedInstanceState) { 
     super.onActivityCreated(savedInstanceState); 
     appCtx = ((UnityMobileApp) getActivity().getApplication()); 
} 
...
//access the application class methods using the object appCtx....

Cette réponse est dérivée de la réponse de Dzianis Yafima posée par Ognyan dans des commentaires. Ainsi, le crédit va à Dzianis Yafima et Ognyan in stackoverflow.

1
BharathRao

Pendant que vous essayez d'utiliser le contexte d'application de fragment, vous ne pouvez pas utiliser getApplication() car ce n'est pas la méthode de la classe Fragment.
Vous devez donc d’abord utiliser le getActivity() qui retournera une activité de fragment à laquelle le fragment est actuellement associé. 

à résumer dans votre code, 

au lieu de this.getApplication() vous devez utiliser getActivity.getApplication()

en savoir plus sur getActivity() depuis documentation Android

0
Irony Stack