如何在非Activity类中静态地获取当前Activity上下文

3
我是一位有帮助的助手,以下是您需要翻译的内容:

我有一个非活动类需要启动一个新的活动。 目前,我只是将当前上下文作为参数传递,但如果可能的话,我希望静态地访问上下文。 我已经尝试创建一个新的应用程序(MyApplication extends Application),既作为新的应用程序又作为主要应用程序,但都没有起作用。 有什么建议吗?

目前的代码:

public class SharedFunctions {
    public static void doSomething(Context context){
        Intent i = new Intent(context, NextActivity.class);
        context.startActivity(i);
    }
}

将上下文传递给您的SharedFunctions类构造函数,然后您可以在所有方法中使用它。 - Houcine
我从未实例化该类,因为所有方法都是静态的。 - lcta0717
在这种情况下,您需要将上下文作为参数传递给类的每个方法(如果该方法需要上下文变量)。 - Houcine
2个回答

3
更清晰的方法是将上下文(Context)传递给每个方法。虽然需要输入更多,但它有助于确保您不会泄漏引用。
当然,如果您真的需要静态引用,则可以在SharedFunctions类中保留静态成员,并为每个Activity设置它。
onResume()和onPause()可能是设置/清除它的好地方,但根据您的需求,您可能希望进行更改。只需尝试不要保留对旧Activity的引用即可。
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
创建这个类:

public class MyApplication
    extends Application
{
    private static Context context;

    @Override
    public void onCreate()
    {
        super.onCreate();
        context = getApplicationContext();
    }

    public static Context getContext()
    {
        return context;
    }
}

之后,您必须在应用程序(清单)中的字段名称中添加此类。

<application
     android:name="yourPackageName.MyApplication"
     ........
</application >

作为结果,您可以在应用程序的任何地方调用MyApplication.getContext()并得到上下文。
希望能帮到你。

嗯,如果这段代码不起作用...那我就没有更多的想法了...抱歉。 - Volodymyr Yatsykiv

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接