У меня есть действие, которое сохраняет объекты ListView в ArrayList и загружает их при OnCreate.
Я тестировал его вчера вечером, и он работал отлично, однако, когда я снова тестировал его сегодня, он загружает то, что уже сохранено со вчерашнего дня, но больше не сохраняет новые элементы списка.
Вот мой код:
public class SubActivity extends AppCompatActivity {
Button addItem;
ImageButton back;
Button saveListBtn;
private ListView listViewer;
ArrayList<ItemObjects> items = new ArrayList<ItemObjects>();
private String key = "arg";
// Извлекает сохраненные настройки из заданной пары kay: value.
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.fragment1_item_screen);
Bundle extra = getIntent().getExtras();
String extraString = extra.getString(key);
// Это загружает элементы из sharedPreferences и работает правильно.
if(loadList(extraString) != null){
items = loadList(extraString);
}
// Загружает listView с правильной информацией.
final ItemObjectsAdapter adapter = new ItemObjectsAdapter(this,
items);
listViewer = (ListView) findViewById(R.id.itemListView);
listViewer.setAdapter(adapter);
// При нажатии кнопки новый объект добавляется в items
ArrayList. Я просто кладу пустой объект на данный момент. Проблемы приходят на saveList(items, key)
. Похоже, что он работает неправильно, но он работал вчера, так как каждый раз, когда я загружаю действие, из sharedPreferences загружаются 4 элемента списка, однако я больше не могу его сохранить.
addItem = (Button) findViewById(R.id.addItemBtn);
addItem.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
ItemObjects blank = new ItemObjects("", "", "", "");
items.add(blank);
saveList(items, key);
adapter.notifyDataSetChanged();
}
});
// Вот код, который у меня есть для сохранения списка предметов. Обратите внимание, что это сработало вчера, я еще ничего не изменил.
private void saveList(ArrayList<ItemObjects> list, String key) {
SharedPreferences appSharedPrefs = PreferenceManager
.getDefaultSharedPreferences(this.getApplicationContext());
SharedPreferences.Editor prefsEditor = appSharedPrefs.edit();
Gson gson = new Gson();
String json = gson.toJson(list);
prefsEditor.putString(key, json);
prefsEditor.apply();
}
// Это просто код для загрузки элементов из sharedPreferences, и, похоже, он работает правильно.
private ArrayList<ItemObjects> loadList(String key) {
SharedPreferences prefs =
PreferenceManager.getDefaultSharedPreferences(this.getApplicationContext());
Gson gson = new Gson();
String json = prefs.getString(key, null);
Type type = new TypeToken<ArrayList<ExerciseObjects>>() {}.getType();
return gson.fromJson(json, type);
}
}
Есть идеи, почему это не экономит?