Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/233.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 在SharedReferences.commit之后更改的列表_Android_Android Recyclerview_Sharedpreferences - Fatal编程技术网

Android 在SharedReferences.commit之后更改的列表

Android 在SharedReferences.commit之后更改的列表,android,android-recyclerview,sharedpreferences,Android,Android Recyclerview,Sharedpreferences,我制作了一个简单的应用程序,其中包含一个片段中的recyclerview。在OnCreateView中,我从一个单独的类的SharedReferences中获得一个列表,然后将其保存到一个私有列表中,如下所示: mModel = AnotherClass.GetListFromSharedPreferences(); 问题是当我试图通过单击按钮将元素添加到RecyclerView和SharedReferences中时。按下按钮时,这是我的代码: AnotherClass.saveInShare

我制作了一个简单的应用程序,其中包含一个片段中的recyclerview。在OnCreateView中,我从一个单独的类的SharedReferences中获得一个列表,然后将其保存到一个私有列表中,如下所示:

mModel = AnotherClass.GetListFromSharedPreferences();
问题是当我试图通过单击按钮将元素添加到RecyclerView和SharedReferences中时。按下按钮时,这是我的代码:

AnotherClass.saveInSharedPreferences(itemAdded);
mModel.add(ItemAdded);
saveInSharedPreferences从SharedReferences获取保存的列表:

 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();
}
  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;
}
它工作正常它在SharedReferences中添加了新项,但是在调用此方法之后,我的mModel似乎已经添加了新项!在调用mModel.add之前。
由于在我调用片段时OnCreateView只调用了一次,并且mModel仅在这段时间内进行了值化,因此我不认为在编辑我的SharedReferences之后,我的mModel怎么可能会被修改…?

若要侦听新添加的项,请使用RegisterOnSharedReferenceChangeListener,添加项时它将保持调用状态

在onCreateView上使用它

SharedPreference.registerOnSharedPreferenceChangeListener (SharedPreferences.OnSharedPreferenceChangeListener listener)

添加更多代码。添加的代码不多。只添加了两个调用的方法,但我不明白为什么在这些说明之后我的列表mModel会更改…我认为mModel引用与recyclerAdapter dataListArray共享。我认为你是对的,如果我更改SharedReferences,mModel会更改,从mModel=AnotherClass.GetListFromSharedReferences更改;To mModel=新建LinkedListNotherClass.GetListFromSharedReferences;这很有效,谢谢