3

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

当前代码:

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

2 回答 2

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);
}
于 2013-07-19T15:13:29.437 回答
1

create this class:

public class MyApplication
    extends Application
{
    private static Context context;

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

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

after that you must add this class to field name in application (Manifest)

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

As a result you can call MyApplication.getContext() anywhere in your application and get the context.

hope, I help you.

于 2013-07-19T14:03:39.113 回答