bind
методы (первоначально onBindViewHolder
) вызывались каждый раз, когда представление пытается показать пользователю.(Действительно, этот метод вызывается снова, когда пользователь выполняет прокрутку вниз и вверх)
Итак, сетевой процесс в onBindViewHolder, называемый сетевым процессом, является плохой идеей с точки зрения проблем жизненного цикла или производительности.
Я предложил этот способ для достижения этого.
- получение всех данных, связанных
item.id
до инициализации адаптера. - Сопоставление данных с Foo и извлеченными данными
- Инициализация адаптера с результатом шага 2.
- В
onBindViewHolder
, holder.itemView.foo_content_like_count.text = item.count
вместо этого подпишитесь retrieveFooFavoriteCountUseCase.
Пример кода, он может не работать хорошо.Я просто привожу, как это работает.)
val items = ...
retrieveFooFavoriteCountUseCase
.execute(items.map { it.id }) // 1)
.applyComputationScheduler()
.subscribe { counts ->
for ((index, count) in counts.indexed()) { // 2)
items[index] = items[index].apply { this.count = count } // 3)
}
// TODO: initialize adapter with items
}.addTo(compositeDisposable)
1) вы должны реализовать методы execute с помощью List?Я не знаю конкретный тип Foo.
2) count содержит список нужных вам счетчиков.В этом примере кода я использовал for-each для сопоставления данных.но вы можете использовать собственный соответствующий код.
3) То же, что и выше, вы можете использовать собственный соответствующий код.
В результате подписка будет вызываться только один раз в течение всего процесса.