我是初学者,我在理解一段代码时遇到了麻烦。当这个功能唤起时,有人可以解释一下吗?它的用途是什么?
这是我的代码:
public void onBindViewHolder(myViewHolder holder, int position) {
RecViewHolder currentdata = data.get(position);
holder.favChecker = currentdata.getFavChecker();
holder.serialID = currentdata.getSerialID();
holder.theClassName = currentdata.getTheClassName();
}
答案 0 :(得分:124)
让我先介绍一下背景(你可能已经理解了,但需要解释onBindViewHolder()
)。
RecyclerView
旨在显示项目的长列表(或网格)。假设您要显示100行内容。一个简单的方法是创建100个视图,每行一个并将所有视图放在一起。但这样做会很浪费,因为大多数都不在屏幕上,因为我们可以说只有10个适合屏幕。
所以RecyclerView
只会创建屏幕上的10个视图。这样,您可以获得10倍的速度和内存使用率。但是当你开始滚动并需要开始显示下一个视图时会发生什么?
同样,一个简单的方法是为您需要显示的每个新行创建一个新视图。但是这种方式到达列表末尾时,您将创建100个视图,并且您的内存使用量将与第一种方法相同。创建视图需要时间,因此滚动很可能不会很顺利。
这就是为什么RecyclerView
利用了这样一个事实:当您滚动并且新行出现在屏幕上时,旧行也会从屏幕上消失。旧视图不是为每个新行创建新视图,而是回收,并通过将新数据绑定到该视图来重复使用。
这恰好发生在onBindViewHolder()
。最初,您将获得新的未使用的视图持有者,您必须使用要显示的数据填充它们。但是当你滚动时,你将开始获得用于屏幕上的行的视图持有者,你必须用新数据替换他们持有的旧数据。
答案 1 :(得分:5)
由RecyclerView
调用以显示指定位置的数据。此方法用于更新itemView的内容以反映给定位置的项目。