4

即使我没有刷 RecyclerView,loadAfter() 也无法停止。它一直在调用 onBindView->loadAfter()

我尝试调试,找到这些:方法loadAroundInternal in class ContiguousPagedList

int appendItems = getAppendItemsRequested(mConfig.prefetchDistance, index, mStorage.getLeadingNullCount() + mStorage.getStorageCount());

索引保持++,而recyclerView中的getBindView更大,appendItem总是> 0

我不确定,但我想也许

network->appendPage->notifyInserted->bindView->loadAfter->network

然后recyclerView适配器执行onBindView。但是调用了哪个位置的bindViewHolder。所以停不下来。

我不知道我是否正确。我不知道如何解决它。

下面是我写的一些相关代码:</p>

@Override
public void onBindViewHolder(@NonNull BaseViewHolder holder, int position) {
    VB binding = DataBindingUtil.getBinding(holder.itemView);
    setData(binding, getItem(position));
    binding.executePendingBindings();
}

在我自己的扩展PageKeyedDataSource的PagingDataSource中

@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 时会出现问题。

所以现在的问题是:当nestedScrollView中有2个recyclerViews并且带有wrap_content或match_parent时,bindView不能停止loadAfter(),这是一种分页库的方法。

4

1 回答 1

2

所以它之所以发生,是因为当一个网络结果返回时,recycleView 会刷新。由于它在一个nestedScrollView 中,它没有确切的高度。然后 onSizeChanged->getItem->network。

对我来说,解决方案是编写一个实现NestedScrollingParent2的自定义线性布局;

于 2018-11-18T15:04:33.997 回答