Я использую SharedPreferences для передачи некоторых данных от Activity1
до Activity2
при нажатии button
.Затем я добавляю эти данные в ArrayList
в Activity2
.
//Basically I have ListView with images.
//When user ckick on any image, Activity1 opens and it contains this image and it's name
Activity1 {
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String imageName = intent.getStringExtra("name"); //imageName has different vavues, depends on which image user clicked in previous activity.
int imageId = intent.getIntExtra("image", 0); //imageId has different vavues, depends on which image user clicked in previous activity.
String str = Integer.toString(imageId); //convert imageId to use it as a key in SharedPreferences
SharedPreferences sharedPref = getApplicationContext().getSharedPreferences("MyPref", Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPref.edit();
editor.putString("key", str); //save current key,
editor.putInt(str, receivedImage);
editor.putString(str + "a", receivedName);
editor.apply();
}
}
Activity2{
onCreate{
SharedPreferences sharedPref = getApplicationContext().getSharedPreferences("MyPref", Context.MODE_PRIVATE);
String key1 = sharedPref.getString("key", null);
String imageName = sharedPref.getString(key1 + "a", null);
int imageId = sharedPref.getInt(key1, 0);
mDrinkArrayList.add(new Drink(imageName, imageId));
listAdapter = new CustomAdapter(this, mDrinkArrayList);
listAdapter.notifyDataSetChanged();
ListView listDrinks = findViewById(R.id.list_drinks);
listDrinks.setAdapter(listAdapter);
}
}
Проблема в том, что mArrayList
не сохраняет Data
, добавленное ранее.Например, я нажимаю на button
из 3 разных изображений и ожидаю, что mArrayList
будет иметь 3 Data
объектов.Но на самом деле он всегда имеет только последний Data
объект.Я понимаю, почему это происходит - SharedPreferences отменяет старые данные.Я видел много советов, как я должен использовать разные ключи, но я сделал это (поместите imageResourseId в качестве ключа).Я думал о способах решения этой проблемы.Теперь я могу понять следующие способы:
1) каким-то образом позволить SharedPreferences сохранять предыдущие данные (я слышал об использовании базы данных SQL, но у меня не так много изображений для использования базы данных).
2) переопределить mDrinkArrayList
после получения новых данных, поэтому при повторном запуске Activity2 у него в основном старые данные.
3) создать mDrinkArrayList
в Activity1, добавить новые данные при нажатии кнопки и передать mDrinkArrayList
в Activity2, используя SharedPreference.
Может кто-нибудь подсказать, что мне делать в этой ситуации?Заранее спасибо.