Élaborer un peu plus la réponse d'Alex Volovoy -
au cas où vous auriez ce problème avec des fragments, getActivity () fonctionne bien pour obtenir le contexte
Dans d'autres cas:
Si vous ne voulez pas utiliser-
myIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);//not recommend
puis faites une fonction comme celle-ci dans votre OutsideClass -
public void gettingContext(Context context){
real_context = context;//where real_context is a global variable of type Context
}
Maintenant, dans votre activité principale, lorsque vous créez un nouvel OutsideClass, appelez la méthode ci-dessus immédiatement après avoir défini le OutsideClass en donnant le contexte de l'activité comme argument. Toujours dans votre activité principale, faites un
public void startNewActivity(final String activity_to_start) {
if(activity_to_start.equals("ACTIVITY_KEY"));
//ACTIVITY_KEY-is a custom key,just to
//differentiate different activities
Intent i = new Intent(MainActivity.this, ActivityToStartName.class);
activity_context.startActivity(i);
}//you can make a if-else ladder or use switch-case
maintenant revenez à votre OutsideClass, et pour commencer une nouvelle activité, faites quelque chose comme ça-
@Override
public void onClick(View v) {
........
case R.id.any_button:
MainActivity mainAct = (MainActivity) real_context;
mainAct.startNewActivity("ACTIVITY_KEY");
break;
}
........
}
De cette façon, vous pourrez démarrer différentes activités appelées à partir de différents OutsideClass sans gâcher les drapeaux.
Remarque - Essayez de ne pas mettre en cache l'objet contextuel via le constructeur pour le fragment (avec l'adaptateur, c'est bien). Un fragment doit avoir un constructeur vide sinon l'application se bloque dans certains scénarios.
n'oubliez pas d'appeler
OutsideClass.gettingContext(Context context);
dans la fonction onResume () également.