Java 在RecyclerView适配器内显示SharedReference
我无法将上下文从活动传递到适配器 我这样称呼我的SharedReference:Java 在RecyclerView适配器内显示SharedReference,java,android,Java,Android,我无法将上下文从活动传递到适配器 我这样称呼我的SharedReference: SharedPreferences pref = PreferenceManager .getDefaultSharedPreferences(ctx); String userObject = pref.getString(key, null); 这个需要上下文,所以我使用:getApplicationContext() 但这在适配器(RecyclerView)中不起作用
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(我的首选项\名称,上下文.模式\私有);我尝试了很多其他的解决方案,但都找不到。