繁体   English   中英

Android在所有项目中的recyclerview中更改textview而不重绘整个列表

[英]Android change textview in recyclerview in all items without redrawing the entire list

我有一个带有项目列表的recyclerview,每个项目除其他外还有一个与用户保持一定距离的textview。 当用户身体四处走动时,我想更新项目的距离而不重绘列表。 例如,假设用户站在三角形的中间,点为item1,2,3:

item1 5英尺

item2 10英尺

item3 15英尺

现在,用户将2英尺移向了item1-因此更改为:

item1 3英尺

item2 12英尺

item3 17英尺

但我不想重画。 换句话说,如果列表中有5000个项目,并且用户向下滚动到项目3150,然后更改了他的位置,则我不想执行诸如notifydatasetchanged之类的操作,该操作将重绘整个列表并向用户显示位置0的所有内容我想改为动态地仅更改列表中每个项目的距离的文本,并且就用户而言,一切都相同,并且只有距离发生了变化。

最好的方法是什么?

首先,您不能避免列表重绘,这就是更新UI的方式,但是请放心,到处都有缓存来处理小的更改。

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

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

如果您具有稳定的ID,则即使您调用notifyDataSetChanged ,如果适配器具有稳定的ID,RecyclerView也会使用当前表示该项目的现有视图保持器来调用onBindViewHolder 在ViewHolder中保留对您的项目的引用。 调用onBind ,请检查是否相同,并且仅更新必要的部分。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM