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