Java 何时调用onBindViewHolder及其工作原理?

Java 何时调用onBindViewHolder及其工作原理?,java,android,Java,Android,我是一个初学者,在理解一段代码时遇到了困难。有人能解释一下这个函数什么时候启动,它是用来做什么的吗 这是我的密码: public void onBindViewHolder(myViewHolder holder, int position) { RecViewHolder currentdata = data.get(position); holder.favChecker = currentdata.getFavChecker();

我是一个初学者,在理解一段代码时遇到了困难。有人能解释一下这个函数什么时候启动,它是用来做什么的吗

这是我的密码:

    public void onBindViewHolder(myViewHolder holder, int position) {

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

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


要了解更多信息,请检查

让我从一点背景知识开始(您可能已经了解了,但需要解释一下
onBindViewHolder()

RecyclerView
设计用于显示项目的长列表(或网格)。假设您要显示100行内容。一个简单的方法是只创建100个视图,每行一个视图,然后将它们全部布局。但这将是浪费,因为他们中的大多数人都会离开屏幕,因为假设只有10人适合在屏幕上

因此,
RecyclerView
只创建屏幕上的10个视图。这样,您的速度和内存使用率提高了10倍。但是当您开始滚动并需要开始显示下一个视图时会发生什么

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

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


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

检查此项,希望它能帮助您感谢@PradeepGupta,但调用它时我仍然感到困惑。随着SDK中的升级,现在我得到了不同的行为,即onBindViewHolder是有争议地呼叫。@Abhishek我想这也是我对
onBindViewHolder
行为的观察。我正在尝试编写一个应用程序,其中列出了任意数量的带有图像的项目(数千个项目),当我记录对
onBindViewHolder
的调用时,记录的所有数千个项目。@patrickjason91我浏览了一些链接。有些情况下,例如当我们在BindViewHolder上的滚动视图中使用Recycler View时,会不断被调用,在某些SDK中,Recycler View也无法按预期工作,因此我们最好使用稳定的Recycler View支持。@Abhishek在搜索一些问题和答案时,一些人声称问题是由于较新版本的
RecyclerView
造成的,而且问题也发生在棒棒糖前的设备上。我正在用旧版/上市前的设备进行测试编辑:我现在用棒棒糖后的设备、牛轧糖和issue still进行了测试persists@Marcin,您说“RecyclerView只创建屏幕上的10个视图”,第11个视图在什么时候被调用?i、 例如,第10项中有多少是可见的?