详细阐述 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() 函数中也是如此。