2015-07-12 74 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