在RecyclerView Adapter

时间:2017-03-30 21:51:28

标签: java android

我有问题将上下文从Activity传递给适配器。

我正在调用我的共享偏好:

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

这个需要上下文,所以我正在使用:getApplicationContext()

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

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

3 个答案:

答案 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")