Die Antwort von Alex Volovoy ein wenig weiter ausführen -
Falls Sie dieses Problem mit Fragmenten haben, funktioniert getActivity() gut, um den Kontext zu erhalten
In anderen Fällen:
Wenn Sie nicht wollen
myIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);//not recommend
dann machen Sie eine Funktion wie diese in Ihrer OutsideClass -
public void gettingContext(Context context){
real_context = context;//where real_context is a global variable of type Context
}
Wenn Sie nun in Ihrer Hauptaktivität eine neue OutsideClass erstellen, rufen Sie die obige Methode unmittelbar nach der Definition der OutsideClass auf und geben den Kontext der Aktivität als Argument an. Auch in Ihrer Hauptaktivität machen Sie eine Funktion-
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
Kehren Sie nun zu Ihrer OutsideClass zurück, und starten Sie eine neue Aktivität wie folgt
@Override
public void onClick(View v) {
........
case R.id.any_button:
MainActivity mainAct = (MainActivity) real_context;
mainAct.startNewActivity("ACTIVITY_KEY");
break;
}
........
}
Auf diese Weise können Sie verschiedene Aktivitäten starten, die von verschiedenen OutsideClass aus aufgerufen werden, ohne dass Sie mit Flaggen durcheinander kommen.
Hinweis: Versuchen Sie nicht, das Kontextobjekt über den Konstruktor für das Fragment zu cachen (mit dem Adapter ist das in Ordnung), ein Fragment sollte einen leeren Konstruktor haben, sonst stürzt die Anwendung in einigen Szenarien ab.
nicht vergessen zu telefonieren
OutsideClass.gettingContext(Context context);
auch in der Funktion onResume().