- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我遇到的问题与此处的问题相同: 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/
设置: 我们正在使用 PagedListEpoxyController , RxPagedListBuilder , ItemKeyedDataSource运行时 Mockgenerator它只是根据
我需要将域对象映射到 UI 对象并使用实时分页列表显示。 我试图映射 LiveData>至 LiveData>和 map PositionalDataSource至 PositionalDataSou
PagedList 已弃用,我应该改用什么?我正在使用分页库从 Firestore 中获取数据。 这是我的代码 val config = PagedList.Config.Builder()
我已经使用 Android 的分页库 (https://developer.android.com/topic/libraries/architecture/paging.html) 实现了一个带有分
我自己手动计算了一堆行,包括一些不在我的数据库中的附加数据。为了提高效率,我只根据页码和页面大小计算了当前页面中的行数。 我试图将其放入 PagedList 中,但这需要整个数据集,而不是我想显示的子
我的问题是如何更新 PagedList 中的项目? 在我的例子中,有 ListActivity 和 DetailsActivity。列表 Activity 使用分页组件从网络(仅)获取帖子,并使用分页
我一直在使用 Google 的 arch 库,但是使测试变得困难的一件事是使用 PagedList . 对于此示例,我使用存储库模式并从 API 或网络返回详细信息。 所以在 ViewModel 中我
我正在尝试将架构组件集成到我的应用程序中,即分页、LiveData、ViewModel。Room 之前已经集成和测试过,所以我可以返回 DataSource.Factory来 self 的 DAO 类
我在我的 View 中使用 PagedList,但我的脚手架 Controller 是使用这种默认索引操作生成的: public async Task Index() { return Vie
我正在使用 http://www.asp.net/mvc/tutorials/getting-started-with-ef-using-mvc/sorting-filtering-and-pagin
我丢失了第二页和之后的所有数据。第一个结果/页面显示了正确的数据。第二页及之后,没有数据。 我的代码: public ActionResult Contact(int? pageNumber, str
我正在尝试显示产品列表并显示分页。所以,我决定使用 PagedList 插件。我在下面的链接中阅读了一些有关如何修改 Controller 和 View 的示例。 https://github.com
我安装了 PagedList.MVC Nugget 包,我正在尝试从列表中创建一个 PagedList ListProductsList 在我看来: @model PagedList.IPagedLi
已经两天了,我正在尝试学习如何将新的分页库与 Kotlin 语言一起使用(也是第一次) 所以我已经阅读了很多指南/教程和 Github repo (https://github.com/STAR-ZE
我正在使用 PagedList我的应用程序中的库。 使用 PagedListAdapter 一切正常.但是,我无法找到如何获得回调并收到 PagedList 已更新的通知。 在列表的ItemKeyed
嗨,我正在使用 mvvm 和分页库。分页效果完美。 我想从列表中删除项目。 当我尝试删除项目时 E/AndroidRuntime: FATAL EXCEPTION: main Process:
我正在使用 Play2.0 框架作为后端 API。所以我想从数据库中列出游乐设施,并且我想排除具有重复“地点”名称的游乐设施。 我正在使用此代码,但这给了我存储在数据库中的所有游乐设施记录。如何排除重
我正在使用 TroyGoode 制作的 PagedList:https://github.com/TroyGoode/PagedList/ 但我希望它呈现不同于我目前拥有的其他输出。 默认输出为:ww
我正在尝试找出在 asp.net MVC 中使用 ViewModel 实现分页列表的正确方法。 假设我有以下 PagedClientViewModel: public class PagedClien
我的通用存储库中有以下功能。 var list = query.ToPagedList(pageNumber, pageSizeNumber); 这行有两个问题 public IEnumerable
我是一名优秀的程序员,十分优秀!