gpt4 book ai didi

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

转载 作者:IT老高 更新时间:2023-10-28 20:34:03 25 4
gpt4 key购买 nike

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

这是我的代码:

    public void onBindViewHolder(myViewHolder holder, int position) {

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

最佳答案

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

RecyclerView 旨在显示项目的长列表(或网格)。假设你想显示 100 行的东西。一种简单的方法是只创建 100 个 View ,每行一个,然后将它们全部布置出来。但这会很浪费,因为它们中的大多数会不在屏幕上,因为假设只有 10 个适合屏幕。

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

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

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

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

关于java - 何时调用 onBindViewHolder 以及它是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37523308/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com