Elaborare la risposta di Alex Volovoy ancora un po '-
nel caso in cui si riscontri questo problema con i frammenti, getActivity () funziona bene per ottenere il contesto
In altri casi:
Se non vuoi usare-
myIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);//not recommend
quindi fai una funzione come questa nella tua OutsideClass -
public void gettingContext(Context context){
real_context = context;//where real_context is a global variable of type Context
}
Ora, nella tua attività principale ogni volta che fai una nuova OutsideClass chiama il metodo sopra immediatamente dopo aver definito la OutsideClass dando il contesto dell'attività come argomento. Anche nella tua attività principale fai una funzione-
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
ora ritorna al tuo OutsideClass e per iniziare nuove attività fai qualcosa del genere-
@Override
public void onClick(View v) {
........
case R.id.any_button:
MainActivity mainAct = (MainActivity) real_context;
mainAct.startNewActivity("ACTIVITY_KEY");
break;
}
........
}
In questo modo sarai in grado di avviare diverse attività chiamate da diversi OutsideClass senza incasinare le bandiere.
Nota: prova a non memorizzare nella cache l'oggetto di contesto tramite il costruttore per il frammento (con adattatore, va bene). Un frammento dovrebbe avere un costruttore vuoto, altrimenti l'applicazione si arresta in modo anomalo in alcuni scenari.
ricordati di chiamare
OutsideClass.gettingContext(Context context);
anche nella funzione onResume ().