Android在所有项目中的recyclerview中更改textview,而无需重新绘制整个列表

时间:2015-04-12 12:45:23

标签: java android android-recyclerview

我有一个带有项目列表的recyclerview,每个项目都有一个与用户有距离的文本视图。当用户身体移动时,我想更新项目的距离而不重新绘制列表。例如,假设用户站在三角形的中间,点为item1,2,3:

item1 5英尺

item2 10英尺

item3 15英尺

现在用户向item1移动2英尺 - 因此它变为:

item1 3英尺

item2 12英尺

item3 17英尺

但我不想重绘。换句话说,如果列表有5000个项目并且用户已向下滚动到项目3150然后更改了他的位置,我不想做像notifydatasetchanged这样的事情,然后重新绘制整个列表并向用户显示来自位置0.我想改为仅动态地改变列表中每个项目的距离文本,并且就用户而言,一切都是相同的,只有距离已经改变。

这样做的最佳方式是什么?

1 个答案:

答案 0 :(得分:2)

首先,你不能卵形列表重绘,这就是更新UI的工作方式,但请放心,周围有缓存来处理小的变化。

关于项目,如果您致电notifyDataSetChanged,RecyclerView将仅重新绑定可见视图。这将是您支付的成本,适配器的实际大小(在您的示例中为5000)是无关紧要的。

如果您希望RecyclerView仅更新已更改的视图,则必须致电notifyItemChanged(position)。在这种情况下,RecyclerView将仅重新绑定已更改的项目,并且仅在它们可见时才重新绑定。

如果您有稳定的ID,即使您致电notifyDataSetChanged,如果您的适配器具有稳定的ID,RecyclerView将使用当前代表该位置项目的现有视图持有者调用onBindViewHolder。在ViewHolder中保留对项目的引用。调用onBind时,请检查它是否是同一项目,并仅更新必要的部分。