Alex Volovoy의 답변을 조금 더 정교하게-
조각 으로이 문제가 발생하는 경우 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 () 함수에서도.