2015-03-03 3 views
14

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

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

+0

Документация объясняет это. 'RecyclerView может выполнять несколько оптимизаций, если он может заранее знать, что изменения в содержимом адаптера не могут изменить размер самого RecyclerView. Если ваше использование RecyclerView попадает в эту категорию, установите для этого значение true. « –

+0

извините, я действительно не понимаю следующие слова:« изменения »в содержимом адаптера не могут изменить« размер »самого RecyclerView. Если ваше использование RecyclerView относится к этой категории, установите для этого значение true. какое изменение, это размер его? Если это так, то что означает «размер»? – machinezhou

+0

Изменяет ли ваш recyclerview witdh или высоту в соответствии с количеством объектов в вашем адаптере? –

ответ

9

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

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

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

mRecyclerView.setHasFixedSize(true); 

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

mRecyclerView.setHasFixedSize(false); 

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

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

5

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

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

Вот URL ссылки

http://antonioleiva.com/recyclerview/

Пример:

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

Если данные взяты с сервера, и размер их обычно неожиданен, в этой ситуации нам лучше не устанавливать этот метод как истинный, верно? – machinezhou

+0

, так что это привело меня к заключению: если есть 20 значков, и я хочу поместить их в recyclerview, это лучшая настройка категории, чтобы этот метод был true.please исправьте меня. – machinezhou