Android RecyclerView适配器项目刷新

时间:2015-12-17 12:29:24

标签: android

我遇到了RecyclerView和RecyclerView.Adapter的问题。我有一个函数,它将项目列表设置到适配器中。当用户刷卡到刷新时,我加载新数据,这意味着一些项目是新的,然后我将项目设置为适配器,我必须使它们无效。我的问题在于notifyItemRangeInserted()notifyItemRangeChanged()。当新项目出现时,如果我先删除它们,然后notifyItemRangeRemoved(),然后添加并最终调用notifyItemRangeInserted()它会起作用,但所有项目都会失效并且会闪烁。否则,如果我确定新旧数据集之间的差异大小,则不会使适当的元素无效。

public void setItems(@NonNull List<ItemType> items) {
        final int oldSize = mItems.size();
        mItems.clear();
        notifyItemRangeRemoved(firstPosition(), oldSize);
        mItems.addAll(items);
        notifyItemRangeInserted(firstPosition(), items.size());
}

mItems是ArrayList。

3 个答案:

答案 0 :(得分:1)

你能试试这个吗?

myRecycleAdapter.notifyItemInserted(items.size());

您的方法如下所示:

Windows 64 bit

}

希望这会对你有所帮助。

答案 1 :(得分:0)

我想也许你正在过度思考这种情况。

与Hiren的答案类似,你可以:

public void setItems(@NonNull List<ItemType> items) {
   mItems.clear(); 
   mItems.addAll(items);
   myRecycleAdapter.notifyDataSetChanged(); }

NotifyDataSetChanged既不会导致闪烁效果,也不会导致列表的当前位置更多。

答案 2 :(得分:0)

解决方案是在适配器中使用hasStableIds(),以便适配器可以找出更改的项目。