让我开始只是一点点背景(你可能已经明白了,但是需要解释onBindViewHolder()).
RecyclerView旨在显示项目的长列表(或网格).假设你想显示100行的东西.一个简单的方法是创建100个视图,每行一个,并将其全部显示出来.但是这将是浪费的,因为他们中的大多数都是屏幕上的,因为我们说只有10个适合屏幕.
所以RecyclerView而是只创建了10个在屏幕上的视图.这样你就可以获得10倍的速度和内存使用.但是,当您开始滚动并需要开始显示下一个视图时会发生什么?
再次,一个简单的方法是为每个需要显示的新行创建一个新视图.但是,当您到达列表的末尾时,您将创建100个视图,并且您的内存使用率将与第一个方法相同.创建视图需要时间,所以滚动最有可能不顺利.
这就是为什么RecyclerView利用了这样的事实:当你滚动并且新的行进入屏幕时,老行消失在屏幕上.不是为每个新行创建新视图,而是通过将新数据绑定到旧视图来进行回收和重用.
这正好在onBindViewHolder()中.最初,您将获得新的未使用的视图持有者,您必须填充要显示的数据.但是当您滚动时,您将开始获取用于执行屏幕的行的视图持有者,而您必须使用新数据替换他们持有的旧数据.