Ще більше деталізуючи відповідь Олексія Волового -
у випадку, якщо ви отримаєте цю проблему з фрагментами, getActivity () працює добре, щоб отримати контекст
У інших випадках:
Якщо ви не хочете використовувати-
myIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);//not recommend
потім зробіть подібну функцію у своєму OutsideClass -
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
тепер поверніться до свого OutsideClass, і щоб розпочати нову діяльність, зробіть щось подібне -
@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 ().