簡體   English   中英

在 RecyclerView Adapter 中顯示 sharedpreference

[英]Show sharedpreference inside RecyclerView Adapter

我在將上下文從 Activity 傳遞到 Adapter 時遇到問題。

我這樣稱呼我的共享首選項:

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

而這個需要上下文,所以我使用: getApplicationContext()

但這在適配器(RecyclerView)中不起作用,有人面臨同樣的問題嗎?

將適配器添加到 Manifest 文件中會解決問題嗎? (只是一個建議)

我不確定您在問什么,但這是我能想到的解決方案。 通過構造函數在適配器中傳遞調用活動的上下文,然后使用該上下文。

Context ctx;

public YourAdapter(Context ctx){
    this.ctx = ctx;
}

現在在你的適配器中你可以做到這一點

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

在您的適配器中,像這樣使用Context創建構造函數,

public AdapterList(Context ctx){
    SharedPreferences pref = PreferenceManager
            .getDefaultSharedPreferences(ctx);
    String userObject = pref.getString(key, null);
}

並通過傳遞創建它

    adapter = new YourAdapter(getApplicationContext());

我建議你將你的偏好管理代碼分成單例類,這樣你就可以在任何地方訪問偏好,就像這樣

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

這就是我所做的。 (如果您不能在SharedPreferences中訪問類“ context”)

  1. 通過“ 上下文mConext”創建適配器類的上下文 ; 或“ 私有WeakReference mContext;
  2. 在需要在SharedPrefernce內部使用上下文的任何地方,都可以使用“ this.mContext.get() ”代替“ mContext ”。 SharedPreferences首選項= this.mContext.get()。getSharedPreferences(MY_PREFERENCE_NAME,Context.MODE_PRIVATE);

我嘗試了許多其他解決方案,但找不到東西。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM