带有占位符的Android分页BoundaryCallback无法正常工作?

时间:2019-06-20 21:26:52

标签: android pagination

我已经开始从RecycledViewAdapter迁移到PagedListAdapter,为了实现这一点,我使用启用了ItemKeyedDataSource,BoundaryCallback和Placeholders的RxPagedListBuilder。

我指的是将数据库作为缓存的网络数据设计,这表明当我的数据源(从本地数据库加载)用完数据时,将调用BoundaryCallback。

事实证明,BoundaryCallback#onItemAtEndLoaded从未被调用过,我感到很困惑。

我的ItemKeyedDataSource从数据库返回我的第一个加载页面(15个项目)+使用loadInitial()上的callback(data,totalCount)从网络可提取的所有可用项目的totalCount(246)

当我向下滚动列表时,前15个项目按预期出现,但是随后我看到了一堆占位符,并且没有进行BoundaryCallback调用。

我试图分析应该调用BoundaryCallback#onItemAtEndLoaded的代码,其条件如下(PagedList):

 private void tryDispatchBoundaryCallbacks(boolean post) {
    ...

    final boolean dispatchEnd = mBoundaryCallbackEndDeferred
            && mHighestIndexAccessed >= size() - 1 - mConfig.prefetchDistance;

    if (!dispatchBegin && !dispatchEnd) {
        return;
    }

    if (dispatchEnd) {
        mBoundaryCallbackEndDeferred = false;
    }
    if (post) {
        mMainThreadExecutor.execute(new Runnable() {
            @Override
            public void run() {
                dispatchBoundaryCallbacks(dispatchBegin, dispatchEnd);
            }
        });
    } else {
        dispatchBoundaryCallbacks(dispatchBegin, dispatchEnd);
    }
}

您可以看到mHighestIndexAccessed必须大于size()-1-mConfig.PrefetchDistance;但是,size()的计算结果如下:

mLeadingNullCount + mStorageCount + mTrailingNullCount

简单地说,它将占位符添加到计算中(返回246)。因此,如果正在访问第16个项目,则结果为15> 246-1-15 => 15>230。换句话说,除非我一直滚动到底部(滚动到所有滚动条,否则BoundaryCallback永远不会调用它的方法)。占位符)。

我想念什么?

0 个答案:

没有答案