Когда мы используем recyclerView.setHasFixedSize?

вот вещь: Кто-нибудь знает метод setHasFixedSize? некоторые говорят, что он позволяет оптимизировать, если все элементы имеют одинаковый размер, а в классе RecyclerView - от android.support.v7.widget, он прокомментировал это: RecyclerView может выполнять несколько оптимизаций, если он может заранее знать, что изменения в содержимое адаптера не может изменить размер самого RecyclerView. Если ваше использование RecyclerView попадает в эту категорию, установите для этого значение значение true.

Что это означает? Может ли кто-нибудь показать мне контекст использования или объяснить значение "эта категория" выше? Большое спасибо.

Ответ 1

Интересно, что RecyclerView знает, зависит ли его размер (размеры ширины и высоты) от содержимого адаптера, чтобы избежать дорогостоящих операций макета. Если RecyclerView заранее знает, что его размер не зависит от содержимого адаптера, он пропустит проверку, должен ли его размер меняться каждый раз, когда элемент добавляется или удаляется из адаптера. Это особенно важно, поскольку вставка элементов удаления может происходить очень часто.

Если размер RecyclerView (самого RecyclerView)...

... не зависит от содержимого адаптера:

mRecyclerView.setHasFixedSize(true);

... зависит от от содержимого адаптера:

mRecyclerView.setHasFixedSize(false);

Если вы проверите класс RecyclerView, вы увидите его более подробно, потому что на данный момент mHasFixedSize не используется во многих местах в этом классе.

Установка его как истина не означает, что размер RecyclerView фиксирован, просто означает, что он не изменится из-за изменения содержимого адаптера. Например, размер RecyclerView может измениться из-за изменения размера его родителя.

Ответ 2

setHasFixedSize() используется, чтобы RecyclerView сохранял одинаковый размер.

Эта информация будет использоваться для оптимизации.

Вот ссылка url

http://antonioleiva.com/recyclerview/

Пример:

RecyclerView recyclerView = (RecyclerView) findViewById(R.id.list);
recyclerView.setHasFixedSize(true);