RecyclerView - onCreateViewHolders在被卷入

时间:2016-09-27 20:41:00

标签: android android-recyclerview logcat android-viewholder

在RecyclerView中,如果需要,onCreateViewHolder方法将创建新的视图持有者。我知道它会被调用很多次,因为列表中的项目可以放在屏幕上。但是,由于一些奇怪的原因,当我向下滚动我的RecyclableList时,`onCreateViewHolder会再被调用几次。为什么要创建一个新的viewHolder?在什么情况下会创建viewHolder?我认为只需要调用一次。

logcat的:

09-27 16:39:20.805 8603-8603/teamtreehouse.com.myapplication D/testHourViewHolder: I AM INVOKED
09-27 16:39:20.814 8603-8603/teamtreehouse.com.myapplication D/testHourViewHolder: I AM INVOKED
09-27 16:39:20.817 8603-8603/teamtreehouse.com.myapplication D/testHourViewHolder: I AM INVOKED
09-27 16:39:20.818 8603-8603/teamtreehouse.com.myapplication D/testHourViewHolder: I AM INVOKED
09-27 16:39:20.822 8603-8603/teamtreehouse.com.myapplication D/testHourViewHolder: I AM INVOKED
09-27 16:39:20.825 8603-8603/teamtreehouse.com.myapplication D/testHourViewHolder: I AM INVOKED
09-27 16:39:20.826 8603-8603/teamtreehouse.com.myapplication D/testHourViewHolder: I AM INVOKED

向下滚动时会调用这些内容:

09-27 16:39:20.827 8603-8603/teamtreehouse.com.myapplication D/testHourViewHolder: I AM INVOKED
09-27 16:39:20.828 8603-8603/teamtreehouse.com.myapplication D/testHourViewHolder: I AM INVOKED
09-27 16:39:20.830 8603-8603/teamtreehouse.com.myapplication D/testHourViewHolder: I AM INVOKED

1 个答案:

答案 0 :(得分:1)

RecyclerView的重点在于它不需要始终将整个对象列表保存在内存中;这意味着它不会为您的列表项创建ViewHolders,直到(几乎)在屏幕上。因此,当您首次启动活动时,它会在视图中创建所有ViewHolders(具有防止卡顿的轻微阈值),而不是其他任何内容,然后当您滚动它时,开始生成下面的视图。