调用onBindViewHolder时它是如何工作的?

时间:2016-05-30 10:24:32

标签: java android

我是初学者,我在理解一段代码时遇到了麻烦。当这个功能唤起时,有人可以解释一下吗?它的用途是什么?

这是我的代码:

    public void onBindViewHolder(myViewHolder holder, int position) {

        RecViewHolder currentdata = data.get(position);
        holder.favChecker = currentdata.getFavChecker();
        holder.serialID = currentdata.getSerialID();
        holder.theClassName = currentdata.getTheClassName();
}

2 个答案:

答案 0 :(得分:124)

让我先介绍一下背景(你可能已经理解了,但需要解释onBindViewHolder())。

RecyclerView旨在显示项目的长列表(或网格)。假设您要显示100行内容。一个简单的方法是创建100个视图,每行一个并将所有视图放在一起。但这样做会很浪费,因为大多数都不在屏幕上,因为我们可以说只有10个适合屏幕。

所以RecyclerView只会创建屏幕上的10个视图。这样,您可以获得10倍的速度和内存使用率。但是当你开始滚动并需要开始显示下一个视图时会发生什么?

同样,一个简单的方法是为您需要显示的每个新行创建一个新视图。但是这种方式到达列表末尾时,您将创建100个视图,并且您的内存使用量将与第一种方法相同。创建视图需要时间,因此滚动很可能不会很顺利。

这就是为什么RecyclerView利用了这样一个事实:当您滚动并且新行出现在屏幕上时,旧行也会从屏幕上消失。旧视图不是为每个新行创建新视图,而是回收,并通过将新数据绑定到该视图来重复使用。

这恰好发生在onBindViewHolder()。最初,您将获得新的未使用的视图持有者,您必须使用要显示的数据填充它们。但是当你滚动时,你将开始获得用于屏幕上的行的视图持有者,你必须用新数据替换他们持有的旧数据。

答案 1 :(得分:5)

RecyclerView调用以显示指定位置的数据。此方法用于更新itemView的内容以反映给定位置的项目。

了解详情RecyclerView.Adapter#onBindViewHolder