我试图创建一个收藏夹列表。我有这个叫做Animal的类,另一个叫Favorites。收藏夹数组列表在收藏夹中创建。我可以从动物访问收藏夹arraylist与获取另一个类的共享首选项数据
public static Favorites addfavorite = new Favorites();
并将项目添加到最惠国待遇列表。
作为从动物类添加到收藏夹列表中的项目,我需要保存这个数组列表。我试图用SharedPreferences来做到这一点。它几乎可以工作。添加项目并完全关闭并重新打开应用程序后,我得到以下问题。
问题:
如果我打开应用程序,并转到动物类,而无需打开收藏类第一,并看到了以前添加的项目(因此对于收藏夹OnCreate()
方法尚未调用) ,如果我在动物类中添加或不添加新项目到收藏夹列表中(这并不重要),当我打开“收藏夹”类时,先前添加的项目将被删除并替换为新添加的项目如果新项目被添加,如果不是,则列表变为空。 (我不想要这个,我需要既旧的和新的项目)但如果我第一次打开收藏夹类,并看到以前添加的项目(因此'OnCreate()'方法被称为'收藏夹'),然后去到动物课并添加新的项目,新的和旧的项目都列在'收藏夹'中。 (这是我试图实现的)
我该如何解决这个问题?
编辑:从动物
@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一些码为i创建的任意数组列表。它与收藏夹类或收藏夹列表没有关系,它实际上是无用的。所以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);
}
}
从onCreate()方法发布一些代码在这里... –
我添加了一些相关的代码 –
在'Animal'的'onPause'中使用的'addfavorite'变量是什么? – Szymon