我試圖創建一個收藏夾列表。我有這個叫做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