У меня есть основной RecyclerView, который содержит другие RecyclerView (назовем их subRecyclerViews). Количество subRecyclerView основано на данных, полученных с сервера. Проблема в том, что всякий раз, когда subRecyclerView собирается стать видимым, он создает ViewHolder для всех своих элементов одновременно (вместо того, чтобы создавать ViewHolder только для видимых элементов).
В моем методе MainRecyclerViewAdapter onBindViewHolder() я вызываю
subRecyclerViewAdapter.setData(data);
subRecyclerView.notifyDataSetChanged();
что приводит к задержке, поскольку subRecyclerView вызывает методы onCreateViewHolder() и onBindViewHolder() для всех своих элементов.
Версия RecyclerView, которую я использую,
com.android.support:recyclerview-v7:25.1.1
Вопрос в том, есть ли способ сообщить subRecyclerView, что ему не нужно создавать ViewHolder для элементов, которые еще не видны? Кроме того, это ошибка в RecyclerView или я что-то не так делаю?
ListView
s или включать прокрутку с помощьюScrollView
s. - person Rosário Pereira Fernandes   schedule 03.02.2017ListView
было бы лучше, чем использованиеRecyclerView
? Я всегда думал, что они добавилиRecyclerView
, потому что он был лучше оптимизирован, чемListView
. ИспользованиеScrollView
может быть лучшим способом, но есть проблема, что я не знаю, сколько SubRecyclerView будет, пока не получу данные с сервера. Также каждый из SubRecyclerView может отображать данные по-разному, некоторые из них представляют собой сетки, некоторые — горизонтальные списки или обычные вертикальные списки. Это также основано на данных с сервера. - person Mischmo   schedule 06.02.2017RecyclerView
создает все представления одновременно, разве это не похоже на использованиеListView
? Также я не думаю, чтоRecyclerView
точно уничтожает старые представления и создает новые для новых видимых элементов. Насколько я понимаю, он только перерабатывает старые представления и повторно использует их для новых элементов. И поскольку задержка возникает только тогда, когда в поле зрения появляется новый SubRecyclerView и метод onCreateViewHolder() вызывается для всех элементов SubRecyclerView одновременно, я думаю, что проблема именно в том, что он ведет себя какListView
. - person Mischmo   schedule 06.02.2017