在SharedPreferences.commit

时间:2017-09-29 12:02:48

标签: android android-recyclerview sharedpreferences

我在片段中创建了一个带有recyclerview的简单应用程序。在OnCreateView中,我从SharedPreferences(从一个单独的类)中获取一个列表,然后将其保存到这样的私有列表中:

mModel = AnotherClass.GetListFromSharedPreferences();

问题是当我尝试通过单击按钮将元素添加到RecyclerView(和SharedPreferences)中时。这是按下按钮时的代码:

AnotherClass.saveInSharedPreferences(itemAdded);
mModel.add(ItemAdded);

saveInSharedPreferences从SharedPreferences获取已保存的列表:

 public boolean saveInSharedPreferences(@NonNull final Item item) {
    List<item> currentSaved = GetListFromSharedPreferences();
    if (currentSaved.size() == 0) {
        currentSaved = new LinkedList<>();
    }
    currentSaved.add(item);
    mCache = currentSaved ;
    return save();
}

它调用save方法,保存在SharedPreferences中编辑的列表:

  private boolean save() {
    if (mCache != null) {
        try {
            final JSONArray array = new JSONArray();
            for (Item item : mCache) {
                JSONObject item = item.toJson(); //Just put everthing in a JSON Object
                array.put(item);
            }
            final String arrayAsString = array.toString();
            mSharedPreferences.edit().putString(KEY, arrayAsString).apply();
            return true;
        } catch (JSONException e) {
            e.printStackTrace();
            return false;
        }
    }
    return false;
}

它正常工作(它在SharedPreferences中添加了新项目),但在调用此方法后,似乎我的mModel已经添加了新项目!在致电mModel.add之前。 因为在我调用片段时只调用了OnCreateView一次,并且仅在那段时间内对mModel进行了定值,所以我看不出在编辑我的SharedPreferences之后我的mModel是如何被修改的??

1 个答案:

答案 0 :(得分:1)

监听新添加的项目使用registerOnSharedPreferenceChangeListener它将在添加项目时保持调用

在onCreateView上使用它

SharedPreference.registerOnSharedPreferenceChangeListener (SharedPreferences.OnSharedPreferenceChangeListener listener)