Die Antwort von Alex Volovoy etwas näher erläutern -
Falls dieses Problem mit Fragmenten auftritt, funktioniert getActivity () einwandfrei, um den Kontext abzurufen
In anderen Fällen:
Wenn Sie nicht verwenden möchten-
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 jetzt in Ihrer Hauptaktivität eine neue OutsideClass erstellen, rufen Sie die obige Methode sofort auf, nachdem Sie die OutsideClass definiert haben und den Kontext der Aktivität als Argument angegeben haben. Auch in Ihrer Haupttätigkeit 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 jetzt zu Ihrer OutsideClass zurück, und um eine neue Aktivität zu starten, gehen Sie wie folgt vor:
@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 aufgerufen werden, ohne die Flags durcheinander zu bringen.
Hinweis: Versuchen Sie, das Kontextobjekt nicht über den Konstruktor für das Fragment zwischenzuspeichern (mit Adapter, es ist in Ordnung). Ein Fragment sollte einen leeren Konstruktor haben, da sonst die Anwendung in einigen Szenarien abstürzt.
Denken Sie daran, anzurufen
OutsideClass.gettingContext(Context context);
auch in der Funktion onResume ().