2013-09-22 51 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未初始化並返回它們,則獲取共享首選項。 –