我正在尝试制作收藏夹列表。我有一个名为 Animal 的课程和另一个名为 Favorites 的课程。收藏夹数组列表是在收藏夹类中创建的。我可以从 Animal 访问收藏夹数组列表
public static Favorites addfavorite = new Favorites();
并将项目添加到收藏夹列表。
作为从 Animal 类添加到收藏夹列表的项目,我需要保存这个数组列表。我试图用 SharedPreferences 来做到这一点。它几乎可以工作。添加项目并完全关闭并重新打开应用程序后,我遇到以下问题。
问题:
如果我打开应用程序并转到 Animal 类,而不先打开 Favorites 类并查看先前添加的项目(因此OnCreate()
尚未调用收藏夹的方法),并且如果我添加或不添加新项目到收藏夹列表(没关系)当我在动物类中时,当我打开“收藏夹”类时,如果添加了新项目,以前添加的项目将被删除并替换为新添加的项目,如果没有,列表将变为空。(我不希望这样,我需要同时拥有旧项目和新项目)但是如果我首先打开收藏夹类并查看先前添加的项目(因此为“收藏夹”调用了“OnCreate()”方法)然后去到 Animal 类并添加新项目,新旧项目都列在“收藏夹”中。(这就是我想要实现的目标)
我该如何解决这个问题?
编辑:来自动物的一些代码
@Override
protected void onPause() {
// TODO Auto-generated method stub
prefs = getSharedPreferences(prefName, MODE_PRIVATE);
SharedPreferences.Editor editor = prefs.edit();
editor.putStringSet(PREFS_NAME,
new HashSet<String>(addfavorite.getFavorites()));
editor.commit();
super.onPause();
}
@Override
protected void onResume() {
// TODO Auto-generated method stub
prefs = getSharedPreferences(prefName, MODE_PRIVATE);
favoritesanimal = new ArrayList<String>(prefs.getStringSet(PREFS_NAME,
new HashSet<String>()));
super.onResume();
}
@Override
protected void onSaveInstanceState(Bundle outState) {
// TODO Auto-generated method stub
super.onSaveInstanceState(outState);
outState.putStringArrayList(PREFS_NAME, addfavorite.getFavorites());
}
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onRestoreInstanceState(savedInstanceState);
if (savedInstanceState != null
&& savedInstanceState.containsKey(PREFS_NAME)) {
favoritesanimal = savedInstanceState.getStringArrayList(PREFS_NAME);
}
}
favoritesanimal 是我创建的任意数组列表。它与Favorite 类或Favoriteslist 无关它实际上没用。所以 onPause() 和 onResume 方法目前什么都不做。
这是来自收藏夹的代码(注意我在两个类中使用相同的 sharedpreferences 属性)
@Override
public void onCreate(Bundle savedInstanceState) {
prefs = getSharedPreferences(prefName, MODE_PRIVATE);
favorites = new ArrayList<String>(prefs.getStringSet(PREFS_NAME,
new HashSet<String>()));
super.onCreate(savedInstanceState);
//As you can see i added SharedPreferences to OnCreate
//more code..
}
@Override
protected void onPause() {
// TODO Auto-generated method stub
prefs = getSharedPreferences(prefName, MODE_PRIVATE);
SharedPreferences.Editor editor = prefs.edit();
editor.putStringSet(PREFS_NAME, new HashSet<String>(favorites));
editor.commit();
super.onPause();
}
@Override
protected void onResume() {
// TODO Auto-generated method stub
prefs = getSharedPreferences(prefName, MODE_PRIVATE);
favorites = new ArrayList<String>(prefs.getStringSet(PREFS_NAME,
new HashSet<String>()));
super.onResume();
}
@Override
protected void onSaveInstanceState(Bundle outState) {
// TODO Auto-generated method stub
super.onSaveInstanceState(outState);
outState.putStringArrayList(PREFS_NAME, favorites);
}
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onRestoreInstanceState(savedInstanceState);
if (savedInstanceState != null
&& savedInstanceState.containsKey(PREFS_NAME)) {
favorites = savedInstanceState.getStringArrayList(PREFS_NAME);
}
}