loadAfter() не может остановиться, хотя я не прокручивал RecyclerView. Он продолжает вызывать onBindView->loadAfter()
Я пытался отладить, нашел это: метод loadAroundInternal в классе ContiguousPagedList
int appendItems = getAppendItemsRequested(mConfig.prefetchDistance, index, mStorage.getLeadingNullCount() + mStorage.getStorageCount());
index сохранить ++, в то время как getBindView в recyclerView больше, appendItem всегда >0
Я не уверен, но я думаю, может быть
network->appendPage->notifyInserted->bindView->loadAfter->network
затем адаптер recyclerView выполняет onBindView. Но вызывается bindViewHolder, позиция которого не должна вызываться. Так что это не может остановиться.
Я не знаю, прав я или нет. И я не знаю, как это исправить.
ниже приведен соответствующий код, который я написал:
@Override
public void onBindViewHolder(@NonNull BaseViewHolder holder, int position) {
VB binding = DataBindingUtil.getBinding(holder.itemView);
setData(binding, getItem(position));
binding.executePendingBindings();
}
В моем собственном PagingDataSource, который расширяет PageKeyedDataSource.
@Override
public void loadAfter(@NonNull LoadParams<Integer> params, @NonNull LoadCallback<Integer, T> callback) {
singleCreator.createSingle(params.key, params.requestedLoadSize)
.subscribe(new SingleObserver<Page<T>>() {
@Override
public void onSubscribe(Disposable d) {
}
@Override
public void onSuccess(Page<T> tPage) {
callback.onResult(tPage.list, tPage.pageNumber + 1);
}
@Override
public void onError(Throwable e) {
}
});
}
public interface SingleCreator<T> {
SingleSubscribeProxy<Page<T>> createSingle(int page, int pageSize);
}
Если нужны другие вещи, я отредактирую вопрос
=====================================
Добавить сообщение: я обнаружил, что если я устанавливаю абсолютное значение для высоты recyclerView, например 100dp, оно работает нормально. Но работайте с проблемой, когда wrap_content и match_parent.
Итак, теперь проблема заключается в следующем: когда 2 recyclerViews в вложенномScrollView и с wrap_content или match_parent, bindView не может остановить loadAfter(), который является методом библиотеки подкачки.