我有问题将上下文从Activity传递给适配器。
我正在调用我的共享偏好:
SharedPreferences pref = PreferenceManager
.getDefaultSharedPreferences(ctx);
String userObject = pref.getString(key, null);
这个需要上下文,所以我正在使用:getApplicationContext()
但是这在适配器(RecyclerView)中不起作用,是否有人面临同样的问题?
将适配器添加到清单文件中可以解决问题吗? (只是一个建议)
答案 0 :(得分:1)
我不确定你在问什么,但这是我能想到的解决方案。 通过构造函数传递适配器中调用活动的上下文,然后使用该上下文。
Context ctx;
public YourAdapter(Context ctx){
this.ctx = ctx;
}
现在在你的适配器中你可以做到这一点
SharedPreferences pref = PreferenceManager
.getDefaultSharedPreferences(ctx);
String userObject = pref.getString(key, null);
答案 1 :(得分:0)
在你的适配器中创建Context
的构造函数,像这样,
public AdapterList(Context ctx){
SharedPreferences pref = PreferenceManager
.getDefaultSharedPreferences(ctx);
String userObject = pref.getString(key, null);
}
并通过传递
创建它 adapter = new YourAdapter(getApplicationContext());
答案 2 :(得分:0)
我建议你将偏好管理代码分成单一类,这样你就可以在任何地方访问首选项,就像这样
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()中的SharedPreferenceManager.getInstance().init(this)
并且您可以随时访问SP:SharedPreferenceManager.getInstance().getValueByKey("somekey")