2015-07-12 62 views
2

我正在從事的應用程序正在從互聯網加載新聞。在主Activity我有一個RecyclerView與選擇的主題。所有內容均在onResume()方法中加載和更新。原因是我每次回到Activity時都想更新新聞的數量和所有這些活動的內容。我也有一個喜好Activity。這是非常標準的。Activity.recreate()複製列表

在我的活動我有一個listener

SharedPreferences.OnSharedPreferenceChangeListener listener = new SharedPreferences.OnSharedPreferenceChangeListener() { 
      public void onSharedPreferenceChanged(SharedPreferences prefs, String key) { 
       recreate(); 
      } 
     } 

每當我去設置菜單和回我有我的RecyclerView與改變的值,但我也得在列表中的每個項目的重複。

但是在我onResume()方法我有幾行代碼:

sa.removeAllItemsFromList(); 
     sa.notifyDataSetChanged(); 

sa.removeAllItemsFromList()是我的方法做這個:siteList.removeAll(siteList);。非常簡單直接。所以問題是:爲什麼我得到一個重複的,我該如何解決它?

回答

1

爲什麼我會得到重複?

因爲您正在撥打onResume()的呼叫列表創建登錄名。當你前進和後退onResume()方法調用,這將創建列表數據並添加到列表

如何解決它?

使用HashSet,而不是ArrayList

的HashSet只包含獨特的元素。

Use of HashSet

+0

非常感謝您的評論。我會在未來測試它。雖然我仍然有一個問題。爲什麼不'removeAllItemsFromList()'工作?它不是應該刪除所有的元素,而是創建新的元素嗎? – Vendetta8247

+0

你可以調用'siteList.clear()' –

+1

謝謝你的建議,雖然在我的情況下它沒有工作。我完全不知道爲什麼。我在我的應用程序中重新安排了活動週期,現在它似乎正常工作。再次感謝您的建議。他們很有幫助 – Vendetta8247