Opracowując nieco odpowiedź Alexa Volovoya -
w przypadku, gdy otrzymujesz ten problem z fragmentami, getActivity () działa dobrze, aby uzyskać kontekst
W innych sprawach:
Jeśli nie chcesz używać-
myIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);//not recommend
następnie utwórz taką funkcję w swoim OutsideClass -
public void gettingContext(Context context){
real_context = context;//where real_context is a global variable of type Context
}
Teraz, w swoim głównym działaniu, kiedy tylko tworzysz nową OutsideClass, wywołaj powyższą metodę natychmiast po zdefiniowaniu OutsideClass, podając kontekst działania jako argument. Również w swojej głównej działalności wykonaj funkcję
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
teraz wróć do klasy OutsideClass i zacznij nową aktywność, zrób coś takiego -
@Override
public void onClick(View v) {
........
case R.id.any_button:
MainActivity mainAct = (MainActivity) real_context;
mainAct.startNewActivity("ACTIVITY_KEY");
break;
}
........
}
W ten sposób będziesz mógł rozpocząć różne działania wywoływane z różnych OutsideClass bez zepsucia się flagami.
Uwaga - Staraj się nie buforować obiektu kontekstowego za pomocą konstruktora dla fragmentu (z adapterem, jest w porządku). Fragment powinien mieć pusty konstruktor, w przeciwnym razie aplikacja ulega awarii w niektórych scenariuszach.
pamiętaj, aby zadzwonić
OutsideClass.gettingContext(Context context);
również w funkcji onResume ().