我已经在片段中使用了一个简单的应用程序。在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)