gpt4 book ai didi

android - 在 PagedList 获取新数据时收到通知

转载 作者:太空宇宙 更新时间:2023-11-03 10:58:18 25 4
gpt4 key购买 nike

我遇到的问题与此处的问题相同: Not getting notified on PagedList updates

我所做的是为我的应用程序实现分页库。我加载了一个数据列表,它可能非常大。 Web 服务仅返回 20 个项目,使用一个键,您可以检索接下来的 20 个,依此类推。现在效果很好,适配器/回收器 View 显示前 20 个项目。一旦我向下滚动,就会加载新项目。问题是我需要知道何时加载新项目并且需要对这些项目的引用。我需要将每个项目添加到列表顶部的 map View 中。如何通知我的分页列表发生变化?我尝试使用“addWeakCallback”,但我似乎不明白它是如何工作的。我希望每次加载数据时都会调用我在 ViewModel 上的观察者,但我的观察者甚至在数据加载之前就被触发了。观察者被一个空列表触发,我只是将该列表提交给我的 PagedListAdapter。有人可以澄清这一切吗?我可以对 pagedList 的观察者数据更改做些什么吗?

这是一些代码:

观察者

Observer<PagedList<Result>> resultObserver = new Observer<PagedList<Result>>() {
@Override
public void onChanged(@Nullable PagedList<Result> results) {
if (mResultAdapter == null) {
mResultAdapter= new ResultAdapter(getActivity());
mResultRecycler.setAdapter(mResultAdapter);
mResultAdapter.submitList(results);
}
}
};

View 模型

sourceFactory = new ResultDataSourceFactory(application.getApplicationContext());
PagedList.Config config = new PagedList.Config.Builder()
.setEnablePlaceholders(false)
.setPageSize(20)
.setPrefetchDistance(5)
.build();
resultList = new LivePagedListBuilder<>(sourceFactory, config).build();

数据源

@Override
public void loadInitial(@NonNull LoadInitialParams<String> params, @NonNull final LoadInitialCallback<Result> callback) {
Webservices.loadSearchResponse(url, new Response.Listener<String>() {
@Override
public void onResponse(String response) {
try {
Response response = parse(response)
if (response != null) {
//Set search seed
searchSeed = response .getSearchSeed();
callback.onResult(response.getItemsList(), 0, 0);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {

}
});
}

@Override
public void loadAfter(@NonNull LoadParams<String> params, @NonNull final LoadCallback<Response> callback) {
Webservices.loadSearchResponse(url, new Response.Listener<String>() {
@Override
public void onResponse(String response) {
try {
Result result = parse(response);
if (result!= null) {
searchSeed = result.getSearchSeed();
callback.onResult(result.getItemsList());
}
} catch (Exception e) {
e.printStackTrace();
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {

}
});
}

预先感谢您的帮助!

最佳答案

对于仍在搜索此问题的人们,我设法找到了解决方案。首先,您应该在 loadInitial、loadAfter 和 loadBefore 中同步加载数据。通过这样做,您的观察员将在正确的时间被调用。另外,您还可以在适配器上添加一个监听器:adapter.registerAdapterDataObserver()通过同时使用这两者,我设法在数据添加到我的 PagedList 时收到通知。

关于android - 在 PagedList 获取新数据时收到通知,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52026868/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com