Разработка ответа Алексея Волового немного больше -
в случае, если вы получаете эту проблему с фрагментами, getActivity () прекрасно работает, чтобы получить контекст
В других случаях:
Если вы не хотите использовать-
myIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);//not recommend
затем сделайте такую функцию в вашем внешнем классе -
public void gettingContext(Context context){
real_context = context;//where real_context is a global variable of type Context
}
Теперь в вашей основной деятельности, когда бы вы ни создавали новый OutsideClass, вызывайте вышеуказанный метод сразу после того, как вы определите OutsideClass, предоставив контекст действия в качестве аргумента. Также в вашей основной деятельности сделать функцию
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
Теперь вернитесь в свой Внешний класс и, чтобы начать новое занятие, сделайте что-то вроде этого:
@Override
public void onClick(View v) {
........
case R.id.any_button:
MainActivity mainAct = (MainActivity) real_context;
mainAct.startNewActivity("ACTIVITY_KEY");
break;
}
........
}
Таким образом, вы сможете запускать различные действия, вызываемые из разных OutsideClass, не путаясь с флагами.
Примечание. Старайтесь не кэшировать объект контекста с помощью конструктора для фрагмента (с адаптером, это нормально). Фрагмент должен иметь пустой конструктор, в противном случае приложение аварийно завершает работу в некоторых сценариях.
не забудьте позвонить
OutsideClass.gettingContext(Context context);
в функции onResume ().