为了账号安全,请及时绑定邮箱和手机立即绑定

loadInitial 方法未在 PositionalDataSource<Item>

loadInitial 方法未在 PositionalDataSource<Item>

慕神8447489 2022-09-01 19:51:09
我正在从Java中的分页库实现PositionalDataSource,并遇到一个问题,即LocationalDataSource的子类的构造函数被调用,但在此之后,loadInitial方法没有被调用。public HistoryPositionalDataSource(List<CallTable> callLogs){    this.callLogs = callLogs;    Log.d("PaginationDataSource", "Constructor");}@Overridepublic void loadInitial(@NonNull LoadInitialParams params, @NonNull LoadInitialCallback callback) {    Log.d("PaginationDataSource", "loadInitial");    if (callLogs!=null && !callLogs.isEmpty())    {        int totalCount = computeCount();        int position = computeInitialLoadPosition(params, totalCount);        int loadSize = computeInitialLoadSize(params, position, totalCount);        callback.onResult(loadRangeInternal(position, loadSize), position, totalCount);    }}@Overridepublic void loadRange(@NonNull LoadRangeParams params, @NonNull LoadRangeCallback callback) {    callback.onResult(loadRangeInternal(params.startPosition, params.loadSize));}这是我的页面列表配置private void init() {    pagedListConfig = (new PagedList.Config.Builder()).setEnablePlaceholders(true)            .setInitialLoadSizeHint(Integer.MAX_VALUE).setPageSize(Integer.MAX_VALUE).build();    Executor executor = Executors.newFixedThreadPool(3);    List<CallTable> listLogs = getCallLogs(context);    historyDataSourceFactory = new HistoryDataSourceFactory(listLogs);    LivePagedListBuilder livePagedListBuilder = new LivePagedListBuilder(historyDataSourceFactory, pagedListConfig);    pagedCallLogs =  livePagedListBuilder            .setFetchExecutor(executor)            .build();}工厂类:public class HistoryDataSourceFactory extends DataSource.Factory {private static final String TAG = HistoryDataSourceFactory.class.getSimpleName();private HistoryPositionalDataSource historyPositionalDataSource;public HistoryDataSourceFactory(List<CallTable> callLogs){    if (callLogs!=null && !callLogs.isEmpty())    {        Log.d("PaginationFactory", "NotNullLogs");        historyPositionalDataSource = new HistoryPositionalDataSource(callLogs);    }}
查看完整描述

2 回答

?
函数式编程

TA贡献1807条经验 获得超9个赞

负载大小和偏移量通过设置,因此您无需自己计算负载范围。PagedList.Config


更改函数loadInitial


@Override

public void loadInitial(@NonNull LoadInitialParams params, @NonNull LoadInitialCallback callback) {

    Log.d("PaginationDataSource", "loadInitial");

    if (callLogs!=null && !callLogs.isEmpty())

    {

        callback.onResult(loadRangeInternal(0, params.requestedLoadSize), 0);

    }

}

编辑:请同时尝试此配置


 PagedList.Config config =

            new PagedList.Config.Builder()

                    .setPageSize(50)

                    .setEnablePlaceholders(false)

                    .setPrefetchDistance(25)

                    .build();

编辑2:尝试将扩展从 更改为 和 更改为DataSource.FactoryDataSource.Factory<Integer, ModelClass>PositionalDataSourcePositionalDataSource<ModelClass>


查看完整回答
反对 回复 2022-09-01
?
叮当猫咪

TA贡献1776条经验 获得超12个赞

经过太多的挣扎,我能够解决我的问题。问题出在我的getPagedCallLog方法上。我写道:


public synchronized LiveData<PagedList<CallTable>> getPagedCallLogs() {


if (pagedCallLogs!=null && pagedCallLogs.getValue()!=null)

{

    Log.d("PagingGetData", "Done");

    return pagedCallLogs;

}

else

{

    Log.d("PagingGetData", "Null");

    return null;

}

}

我正在学习Google I / O '18,他说loadInitial是由pageList调用的,然后我意识到在我的情况下它没有被调用。在删除pagedCallLogs.getValue()!=null后,它工作正常,这是我的愚蠢错误。


现在它看起来像这样:


public synchronized LiveData<PagedList<CallTable>> getPagedCallLogs() {

if (pagedCallLogs!=null)

{

    Log.d("PagingGetData", "Done");

    return pagedCallLogs;

}

else

{

    Log.d("PagingGetData", "Null");

    return null;

}

}


查看完整回答
反对 回复 2022-09-01
  • 2 回答
  • 0 关注
  • 333 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信