Recycler 查看生命周期方法
Recycler View life cycle methods
recycler视图函数调用流程为:
getItemCount() -> getItemViewType() -> onCreateViewHolder() -> onBindViewHolder()
数组列表的大小为 15,屏幕上可见视图的数量为 0 到 6。这是设置适配器后的日志。
getItemCount() 甚至在创建视图之前就被调用了三次。为什么?
填充 7 个视图后,日志为:
一次只能在屏幕上看到 7 个视图。所以onCreateViewHolder()一共被调用了7次
我们再滚动一个视图后,日志是:
onCreateViewHolder() 总共被调用了 9-10 次。 onBindViewHolder():10次,getItemCount():56次,getItemViewType():54次。
假设我们创建了 10 个视图并不断回收它们。 onBindViewHolder() 不应该至少被调用 15 次(列表的大小)因为它正在为每一行设置数据吗?
还有为什么 getItemCount() 和 getItemViewType() 对于 15 个项目的大小被调用 54、56 次?
getItemCount
应该是获取列表大小的简单方法。我们不需要担心它为什么会被多次调用。例如,当适配器正在布置东西时,它可能使用 for 循环来检查所有东西(一次调用),并且它可能在别处将它缓存到局部变量(第二次调用),并且可能进行第二次传递循环(第三次调用)。您可以通过在此函数上设置断点并进行调试来自己找出答案,这样您就可以检查每次调用的堆栈跟踪。
与 getItemViewType
一样,它可能会多次 for-loop 传递数据,因此它会为每个视图多次调用它。
由于 onBindViewHolder()
是一个繁重的方法,他们会小心地尽量减少调用它的次数——每次视图重新出现在屏幕上时只调用一次。
recycler视图函数调用流程为:
getItemCount() -> getItemViewType() -> onCreateViewHolder() -> onBindViewHolder()
数组列表的大小为 15,屏幕上可见视图的数量为 0 到 6。这是设置适配器后的日志。
getItemCount() 甚至在创建视图之前就被调用了三次。为什么?
填充 7 个视图后,日志为:
一次只能在屏幕上看到 7 个视图。所以onCreateViewHolder()一共被调用了7次
我们再滚动一个视图后,日志是:
onCreateViewHolder() 总共被调用了 9-10 次。 onBindViewHolder():10次,getItemCount():56次,getItemViewType():54次。
假设我们创建了 10 个视图并不断回收它们。 onBindViewHolder() 不应该至少被调用 15 次(列表的大小)因为它正在为每一行设置数据吗?
还有为什么 getItemCount() 和 getItemViewType() 对于 15 个项目的大小被调用 54、56 次?
getItemCount
应该是获取列表大小的简单方法。我们不需要担心它为什么会被多次调用。例如,当适配器正在布置东西时,它可能使用 for 循环来检查所有东西(一次调用),并且它可能在别处将它缓存到局部变量(第二次调用),并且可能进行第二次传递循环(第三次调用)。您可以通过在此函数上设置断点并进行调试来自己找出答案,这样您就可以检查每次调用的堆栈跟踪。
与 getItemViewType
一样,它可能会多次 for-loop 传递数据,因此它会为每个视图多次调用它。
由于 onBindViewHolder()
是一个繁重的方法,他们会小心地尽量减少调用它的次数——每次视图重新出现在屏幕上时只调用一次。