我有一个需要启动新活动的非活动类。现在我只是将当前上下文作为参数传递,但我想尽可能静态地访问上下文。我已经尝试创建一个新的应用程序(MyApplication扩展应用程序),作为一个新的应用程序和主要的应用程序,并没有工作。有什么建议吗?
当前代码:
public class SharedFunctions {
public static void doSomething(Context context){
Intent i = new Intent(context, NextActivity.class);
context.startActivity(i);
}
}
答案 0 :(得分:3)
更简洁的方法是将Context传递给每个方法。这是更多的打字,但它有助于确保您没有泄露参考。
当然,如果你真的需要静态引用它,你可以在SharedFunctions类中保留一个静态成员并为每个Activity设置它。
onResume()
和onPause()
可能是设置/清除它的好地方,但根据您的需要,您可能想要更改它。尽量不要继续引用旧活动。
public class SharedFunctions{
private static Context context;
public static void setContext(Context ctx){
context = ctx;
}
public static void doSomething(){
context.someContextFunction();
}
}
在每个活动中:
protected void onResume(){
SharedFunctions.setContext(this);
}
protected void onPause(){
SharedFunctions.setContext(null);
}
答案 1 :(得分:1)
创建此类:
public class MyApplication
extends Application
{
private static Context context;
@Override
public void onCreate()
{
super.onCreate();
context = getApplicationContext();
}
public static Context getContext()
{
return context;
}
}
之后,您必须将此类添加到application(Manifest)中的字段名称
<application
android:name="yourPackageName.MyApplication"
........
</application >
因此,您可以在应用程序的任何位置调用MyApplication.getContext()并获取上下文。
希望,我帮助你。