Elaborando la respuesta de Alex Volovoy un poco más:
en caso de que tenga este problema con fragmentos, getActivity () funciona bien para obtener el contexto
En otros casos:
Si no quieres usar
myIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);//not recommend
luego realice una función como esta en su OutsideClass -
public void gettingContext(Context context){
real_context = context;//where real_context is a global variable of type Context
}
Ahora, en su actividad principal, cuando realice una nueva clase OutsideClass, llame al método anterior inmediatamente después de definir la clase OutsideClass dando el contexto de la actividad como argumento. También en su actividad principal haga una función
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
ahora regrese a su clase externa y, para comenzar una nueva actividad, haga algo como esto:
@Override
public void onClick(View v) {
........
case R.id.any_button:
MainActivity mainAct = (MainActivity) real_context;
mainAct.startNewActivity("ACTIVITY_KEY");
break;
}
........
}
De esta manera, podrá iniciar diferentes actividades llamadas desde diferentes OutsideClass sin meterse con banderas.
Nota: intente no almacenar en caché el objeto de contexto a través del constructor para el fragmento (con adaptador, está bien). Un fragmento debe tener un constructor vacío; de lo contrario, la aplicación se bloquea en algunos escenarios.
recuerda llamar
OutsideClass.gettingContext(Context context);
en la función onResume () también.