我在片段中创建了一个带有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是如何被修改的??
答案 0 :(得分:1)
监听新添加的项目使用registerOnSharedPreferenceChangeListener它将在添加项目时保持调用
在onCreateView上使用它
SharedPreference.registerOnSharedPreferenceChangeListener (SharedPreferences.OnSharedPreferenceChangeListener listener)