RecyclerView — onCreateViewHolders вызывается несколько раз при прокрутке вниз

В RecyclerView метод onCreateViewHolder при необходимости создаст новые держатели представлений. Я знаю, что он будет вызываться столько раз, сколько элементов в вашем списке может поместиться на экране. Но по какой-то странной причине, когда я прокручиваю список RecyclableList вниз, onCreateViewHolder вызывается еще несколько раз. Почему он создает новый viewHolder? в каких случаях будет создаваться viewHolder? Я думал, что его нужно вызвать только один раз.

Логкат:

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

person Matthew Francis    schedule 27.09.2016    source источник


Ответы (1)


Смысл RecyclerView в том, что ему не нужно постоянно хранить весь список объектов в памяти; это означает, что он не создает ViewHolder для ваших элементов списка, пока они (почти) не будут видны на экране. Итак, когда вы впервые запускаете свою активность, она создает все ViewHolder в представлении (с небольшим порогом для предотвращения заикания) и ничего больше, а затем, когда вы прокручиваете, она начинает генерировать представления ниже.

person Demonsoul    schedule 27.09.2016