AlexVolovoyの答えをもう少し詳しく説明します-
uがフラグメントでこの問題を抱えている場合、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()関数でも同様です。