获取另一个类的共享首选项数据

时间:2013-09-22 19:30:30

标签: android android-listview arraylist sharedpreferences

我试图制作收藏列表。我有这个名为Animal的类,另一个叫做收藏夹。收藏夹arraylist在“收藏夹”类中创建。我可以从Animal with

访问收藏夹arraylist
public static Favorites addfavorite = new Favorites();

并将商品添加到优惠列表。

作为从Animal类添加到收藏夹列表的项目,我需要保存此arraylist。我尝试使用SharedPreferences执行此操作。它几乎可以工作。添加项目并完全关闭并重新打开应用程序后,我遇到以下问题。

问题:

如果我打开应用程序并转到Animal类,而不先打开“收藏夹”类并查看之前添加的项目(因此尚未调用“{1}}收藏夹方法”,如果我添加或者不要在收藏夹列表中添加新项目(没关系)当我在Animal类时,当我打开“收藏夹”类时,如果添加了新项目,则删除先前添加的项目并替换为新添加的项目如果不是,列表变空。 (我不想要这个我需要同时拥有新旧项目)但是如果我首先打开收藏夹类并看到之前添加的项目(因此要为'收藏夹'调用'OnCreate()'方法)然后去对于Animal类并添加新项目,新项目和旧项目都列在“收藏夹”中。 (这就是我想要实现的目标)

如何解决此问题?

编辑:动物的一些代码

OnCreate()

favoritesanimal是我创建的任意arraylist。它与Favorite类或者热门列表无关,它实际上是无用的。所以onPause()和onResume方法目前什么都不做。

这是来自收藏夹的代码(注意我在两个类中都使用相同的sharedpreferences属性)

 @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);

    }
}

1 个答案:

答案 0 :(得分:0)

我认为,当您使用addfavorite.getFavorites()时,此方法返回空列表。当你进入Favorites类时,调用Animals类中的onPause()方法并重写你的首选项。