java - 从非 Activity 单例类获取应用程序上下文

标签 java android singleton baseadapter android-context

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

public class ImageAdapter extends BaseAdapter {
    private Context c;

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

问题是我想让 ImageAdapter 成为一个单例,以便从我的所有 Activity 中轻松访问此类的实例。但我不知道如何将应用程序上下文从我的一项 Activity 的 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;
    }
    ...
}

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

如果有任何帮助,我将不胜感激。

最佳答案

更新:2018 年 3 月 6 日

使用 MyApplication 实例而不是 Context 实例。 Application 实例本身就是一个单例上下文实例。

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()

调用应用程序上下文

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

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

关于java - 从非 Activity 单例类获取应用程序上下文,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21818905/

相关文章:

java - 如何在 ubuntu 中将 JMC(Java Mission Control)连接到远程 JVM?

android - 如何在 Android 中播放 GIF 文件?

java - Android Studio 找不到属性 XMLConstants.ACCESS_EXTERNAL_DTD

python - 整个 python 应用程序中的单个数据库连接(遵循单例模式)

java - 两个日期和时区之间的差异

java - 在 Java 中使用新列表初始化 Map

java - 如何递归打印对象及其所有子对象的所有属性、值?

android 无法创建媒体播放器

python - Python Django 中只读单例的实现

java - 单例和线程