Страницы

Поиск по вопросам

пятница, 20 декабря 2019 г.

Когда можно использовать recyclerView.setHasFixedSize(true)?

#android #recyclerview


Javadocs говорит, что использовать recyclerView.setHasFixedSize(true) можно в случае,
если заранее известно, что размер содержимого RecyclerView не зависит от содержимого
адаптера. А что именно это значит? Что использовать recyclerView.setHasFixedSize(true)
можно, когда не изменяется размер одного элемента (высота, ширина)? Т.е. когда все
элементы  recyclerView имеют одинаковые размеры? Или же это означает что-то другое?
    


Ответы

Ответ 1



recyclerView.setHasFixedSize(true) используется, когда размер элементов списка одинаковый (высота/ширина). Это дает определенный выигрыш в скорости разворачивания списка, в частности, как пишет документация: RecyclerView can perform several optimizations if it can know in advance that changes in adapter content cannot change the size of the RecyclerView itself. If your use of RecyclerView falls into this category, set this to true. Грубый перевод: RecyclerView может оптимизировать некоторые операции, если ему известно заранее, что изменения в контенте адаптера не могут изменить размера самого RecyclerView. Если ваш вариант использования RecyclerView подпадает в эту категорию, установите его в true P.S. Учите английский.

Ответ 2



Когда вы пишете setHasFixedSize(true), то подразумеваете, что размеры самого RecyclerView будет оставаться неизменными. Если вы используете setHasFixedSize(false), то при каждом добавлении/удалении элементов RecyclerView будет перепроверять свои размеры, что в некоторых случаях может сказаться на производительности. Обычно setHasFixedSize(false) используется при создании списков с использованием android:layout_height="wrap_content", например раскрывающихся списков, когда размеры контейнера зависят от количества добавленных элементов.

Ответ 3



setHasFixedSize(true) говорит RecyclerView что его размер не зависит от размера элементов внутри него. Цитата из документации: RecyclerView can perform several optimizations if it can know in advance that RecyclerView's size is not affected by the adapter contents. RecyclerView can still change its size based on other factors (e.g. its parent's size) but this size calculation cannot depend on the size of its children or contents of its adapter (except the number of items in the adapter) Простой перевод: RecyclerView может применить некоторые оптимизации, если точно знает, что его размер не зависит от контента его адаптера. RecyclerView по-прежнему может менять свой размер в зависимости от остальных факторов (например размер родителей), но это вычисление размера не может зависеть от размера его потомков или контента в адаптере (за исключением количества элементов в адаптере) Размытой здесь является только последняя поправка. Но довольно очевидно, что это не накладывает ограничений на размеры элементов, как было сказано в ответе Barmaley. Из собственного опыта добавлю, что setHasFixedSize(true) не мешает, например, анимировать изменения высоты элементов через изменение ViewGroup.LayoutParams этих элементов.

Комментариев нет:

Отправить комментарий