sharedPreferences.commit之后更改列表



我已经在片段中使用了一个简单的应用程序。在OnCreateView中,我从共享preferences(来自单独的类)中获得了一个列表,然后将其保存到这样的私人列表中:

mModel = AnotherClass.GetListFromSharedPreferences();

问题是,当我尝试通过单击一个按钮将元素添加到RecyClerview(以及在共享Preferences中)时。按下按钮时,这是我的代码:

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

saveInSharedPreferences从共享的列表中获取保存的列表:

 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();
}

它调用了保存方法,该方法保存在共享preferences中编辑的列表:

  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;
}

它可以正常工作(它在共享Preferences中添加了新项目),但是在调用此方法之后,我的mmodel似乎已经添加了新项目!在调用mModel.add之前。由于当我调用片段时,onCreateview仅被称为1次,并且仅在那个时候才对MMODEL进行了称重,因此我看不出我的mmodel在编辑我的sharedPreferences之后是否可以修改我的mmodel ...?

要收听新添加的项目使用registeronSharedPreferencechangelistener,当添加项目时,它将继续调用

在OnCreateview上使用它

SharedPreference.registerOnSharedPreferenceChangeListener (SharedPreferences.OnSharedPreferenceChangeListener listener)

相关内容

最新更新