2013-09-22 34 views
0

我试图创建一个收藏夹列表。我有这个叫做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); 
    } 
} 
+0

从onCreate()方法发布一些代码在这里... –

+0

我添加了一些相关的代码 –

+0

在'Animal'的'onPause'中使用的'addfavorite'变量是什么? – Szymon

回答

0

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

+0

关于如何修复它的任何想法? –

+0

我觉得这样的:当您尝试保存收藏夹时 - 首先获取旧收藏夹表单首选项,添加新收藏夹并保存。或者在'getFavorites()'方法中,如果arraylist未初始化并返回它们,则获取共享首选项。 –