PagingLibrary с recyclerView не может остановить loadAfter () - PullRequest
0 голосов
/ 15 ноября 2018

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 в nestedScrollView и с wrap_content или match_parent, bindView не может остановить loadAfter (), который является методом библиотеки подкачки.

1 Ответ

0 голосов
/ 18 ноября 2018

Итак, причина, по которой это произошло, когда результат сети возвращается, обновляется recycleView.Так как он находится в nestedScrollView, он не имеет точной высоты.Затем onSizeChanged-> getItem-> network.

Для меня решение состоит в том, чтобы написать пользовательский linearLayout, который реализует NestedScrollingParent2 ;

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...