Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/218.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在RecyclerView适配器内显示SharedReference_Java_Android - Fatal编程技术网

Java 在RecyclerView适配器内显示SharedReference

Java 在RecyclerView适配器内显示SharedReference,java,android,Java,Android,我无法将上下文从活动传递到适配器 我这样称呼我的SharedReference: SharedPreferences pref = PreferenceManager .getDefaultSharedPreferences(ctx); String userObject = pref.getString(key, null); 这个需要上下文,所以我使用:getApplicationContext() 但这在适配器(RecyclerView)中不起作用

我无法将上下文从活动传递到适配器

我这样称呼我的SharedReference:

    SharedPreferences pref = PreferenceManager
            .getDefaultSharedPreferences(ctx);
    String userObject = pref.getString(key, null);
这个需要上下文,所以我使用:
getApplicationContext()

但这在适配器(RecyclerView)中不起作用,是否有人面临同样的问题


将适配器添加到清单文件将解决此问题?(只是一个建议)

在适配器中创建具有
上下文的构造函数,如下所示

public AdapterList(Context ctx){
    SharedPreferences pref = PreferenceManager
            .getDefaultSharedPreferences(ctx);
    String userObject = pref.getString(key, null);
}
并通过传递来创建它

    adapter = new YourAdapter(getApplicationContext());

我不知道你在问什么,但我可以想出一个解决办法。 通过构造函数传递适配器中调用活动的上下文,然后使用该上下文

Context ctx;

public YourAdapter(Context ctx){
    this.ctx = ctx;
}
现在,在适配器中可以执行此操作

SharedPreferences pref = PreferenceManager
        .getDefaultSharedPreferences(ctx);
String userObject = pref.getString(key, null);

我建议您将首选项管理代码分离到singleton类中,这样您就可以在任何地方访问首选项,就像这样

public class SharedPreferenceManager {
private static final SharedPreferenceManager ourInstance = new SharedPreferenceManager();

public static SharedPreferenceManager getInstance() {
    return ourInstance;
}

private SharedPreferenceManager() {
}

private SharedPreferences preferences;

public void init(Context ctx) {
    preferences = PreferenceManager.getDefaultSharedPreferences(ctx);
}

public String getValueByKey(String key) {
    return preferences.getString(key, "");
}..other functions....}
您应该在活动的onCreate()中调用
SharedReferenceManager.getInstance().init(this)


在您可以随时随地访问SP之后:
SharedReferenceManager.getInstance().getValueByKey(“somekey”)

我需要在适配器内部使用上下文,而不是在其自身的活动中。我的适配器是一个类:
公共类适配器列表扩展了RecyclerView.adapter
您在哪里创建了适配器?,将
上下文
放在适配器的构造函数中,或者在新类中创建我的适配器,并从活动中调用它。在我的例子中如何做到这一点?您提供的上下文是这里的问题,我需要在适配器中使用它。通过适配器构造函数将它传递给适配器。然后在适配器中使用它。如何在此处传递它:
公共类适配器列表扩展了RecyclerView.adapter
?构造函数应该是这样的“公共适配器列表(上下文ctx){this.ctx=ctx;}这就是我所做的。(如果您无法访问SharedReferences中的类“context”)1。通过“context mConext”创建适配器类的上下文;或“私人WeakReference mContext”;2。如果需要在SharedReference中使用上下文,请使用“this.mContext.get()”,而不是使用“mContext”。like SharedPreferences preferences=this.mContext.get().getSharedPreferences(我的首选项\名称,上下文.模式\私有);我尝试了很多其他的解决方案,但都找不到。