为什么 PagedList 适配器加载所有数据而不管页面大小?

Pra*_*yak 1 android pagedlist android-room android-paging android-paging-library

我已将页面大小设置为 10,观察者中的页面大小给出了正确的大小,但数据库(ROOM)中的所有项目都已加载到视图持有者中

边界回调onItemAtEndLoaded正在使用数据库中的最后一个项目进行调用。

这是我的配置:

public LiveData<PagedList<Design>> getDesignList(List<String> types, String idCode){
    DataSource.Factory<Integer, Design> factory = mRepository.getDesigns(types, idCode);
    PagedList.Config pagedListConfig =
            (new PagedList.Config.Builder())
                    .setEnablePlaceholders(false)
                    .setInitialLoadSizeHint(10)
                    .setPageSize(10)
                    .build();
    return new LivePagedListBuilder<>(factory, pagedListConfig)
            .setBoundaryCallback(**boundCallBack**)
            .setFetchExecutor(mRepository.mIoExecutor)
            .build();
}
Run Code Online (Sandbox Code Playgroud)

存储库(mRepository.getDesigns):

public DataSource.Factory<Integer, Design> getDesigns(List<String> types, String idCode) {
    return designDao.getDesigns(types,idCode);
}
Run Code Online (Sandbox Code Playgroud)

Dao:(获取设计)

@Query("SELECT * FROM Design WHERE design_type IN (:types) AND id=:idCode ORDER BY design_id ASC")
DataSource.Factory<Integer, Design> getDesigns(List<String> types, String idCode);
Run Code Online (Sandbox Code Playgroud)

边界回调(boundCallBack):

public class BoundCall extends PagedList.BoundaryCallback<Design> {
    public BoundCall() {
        super();
    }

    @Override
    public void onZeroItemsLoaded() {
        super.onZeroItemsLoaded();
        fetchFromNetwork(null);
        Log.e("load", "men-onZeroItemsLoaded");
    }

    @Override
    public void onItemAtFrontLoaded(@NonNull Design itemAtFront) {
        super.onItemAtFrontLoaded(itemAtFront);
        Log.e("load", "men-onItemAtFrontLoaded: " + itemAtFront.getDesignName());
    }

    @Override
    public void onItemAtEndLoaded(@NonNull Design itemAtEnd) {
        super.onItemAtEndLoaded(itemAtEnd);
        fetchFromNetwork(itemAtEnd);
        Log.e("load", "men-onItemAtEndLoaded: " + itemAtEnd.getDesignName());
    }
}
Run Code Online (Sandbox Code Playgroud)

观察者:

designAdapter = new DesignAdapter(this);
    menClothRv.setAdapter(designAdapter);
    // Observer to the changed list in the
    obs = new Observer<PagedList<Design>>(){
        @Override
        public void onChanged(PagedList<Design> designs) { //the pagesize is 10 here, but all items are loaded
            if(!designs.isEmpty())
                designAdapter.submitList(designs);

        }
    };
Run Code Online (Sandbox Code Playgroud)

无法弄清楚:我什至也提到了这一点:pagedList 加载

ian*_*ake 6

听起来您RecyclerView位于另一个滚动视图(例如 )中NestedScrollingView,导致RecyclerView布局其所有项目。

您应该始终避免嵌套沿同一方向(即垂直)滚动的容器,而是将两者分开,或者使用 Paging 3 中内置的页眉功能,或者ConcatAdapter构建将与其他内容一起滚动的单独的页眉和页脚。