从非活动单例类获取应用程序上下文

在我的Android项目中,我有ImageAdapter类,在其中我传递应用程序上下文以满足进一步的需求。

public class ImageAdapter extends BaseAdapter {
    private Context c;

    public ImageAdapter(Context c) {
            this.c = c;
    }
    ...
}

问题是我想将ImageAdapter作为单例,以便从我的所有活动中轻松访问该类的实例。但是我不知道如何将应用程序上下文从getApplicationContext()方法从我的一个活动传递到ImageAdapter。那么,有没有“魔力”可以做到如下呢?

public class ImageAdapter extends BaseAdapter {

    private Context c;

    private static class Holder {
            public static final ImageAdapter IA = new ImageAdapter();
    }

    private ImageAdapter() {
            this.c = /* some magic here */.getApplicationContext();
    }

    public static ImageAdapter getInstance() {
            return Holder.IA;
    }
    ...
}

也许你有一些其他的想法来分享ImageAdapter为我的任何活动。我是Android的新手,我对在活动之间传递数据的方式有点困惑。

我会感谢任何帮助。


答案 1

更新日期: 06-三月-18

使用实例而不是实例。 实例本身是单例上下文实例。MyApplicationContextApplication

public class MyApplication extends Application {

    private static MyApplication mContext;

    @Override
    public void onCreate() {
        super.onCreate();
        mContext = this;
    }

    public static MyApplication getContext() {
        return mContext;
    }
}

上一个答案

您可以获取应用程序上下文,如下所示:

public class MyApplication extends Application {

    private static Context mContext;

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

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

然后,您可以从该方法调用应用程序上下文MyApplication.getContext()

不要忘记在清单文件中声明应用程序:

<application
    android:name=".MyApplication"
    android:icon="@drawable/icon"
    android:label="@string/app_name" >

答案 2

我宁愿将上下文实例作为参数传递给单例中真正需要它的每个方法。


推荐