J'ai fait une application simple avec une vue de recyclage dans un fragment. En OnCreateView
je reçois une liste de SharedPreferences (d'une classe séparée), puis je l'enregistrer dans une liste privée comme ceci:Liste modifiée après SharedPreferences.commit
mModel = AnotherClass.GetListFromSharedPreferences();
Le problème est quand j'essaie d'ajouter un élément à la RecyclerView (et SharedPreferences) en cliquant sur un bouton. Ceci est mon code lorsque le bouton est pressé:
AnotherClass.saveInSharedPreferences(itemAdded);
mModel.add(ItemAdded);
saveInSharedPreferences
obtenir la liste enregistrée de 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();
}
Et il appelle la méthode de sauvegarde, qui sauvegarde la liste éditée dans 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;
}
Cela fonctionne correctement (il ajoute le nouvel élément dans SharedPreferences), mais après l'appel de cette méthodes, semble que mon mModel a déjà ajouté le nouvel élément! Avant d'appeler le mModel.add
. Puisque OnCreateView est appelé juste 1 fois quand j'appelle le fragment, et que le mModel est valorisé seulement dans ce temps, je ne vois pas comment est-il possible que mon mModel soit modifié juste après avoir édité mes SharedPreferences ...?
Ajouter plus de code. Le code ajouté n'a pas grand chose à voir. – codeFreak
Ajout des deux seules méthodes appelées – FeFe