0

我正在尝试制作收藏夹列表。我有一个名为 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);
    }
}
4

1 回答 1

0

我认为,当您使用 时addfavorite.getFavorites(),此方法返回空列表。当你去收藏夹类时,onPause()动物类中的方法被调用并重写你的偏好。

于 2013-09-23T05:38:21.700 回答