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

2022-08-31 12:33:33

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

这是我的代码:

    public void onBindViewHolder(myViewHolder holder, int position) {

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

答案 1

让我从一点点背景开始(你可能已经理解了,但需要解释)。onBindViewHolder()

RecyclerView旨在显示项目的长列表(或网格)。假设您要显示 100 行内容。一个简单的方法是只创建 100 个视图,每行一个视图,并将它们全部列出。但那将是浪费,因为它们中的大多数都在屏幕之外,因为假设只有10个适合屏幕。

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

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

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

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


答案 2

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

有关更多信息,请查看 RecyclerView.Adapter#onBindViewHolder


推荐