【发布时间】:2018-04-27 13:15:16
【问题描述】:
我正在尝试将架构组件集成到我的应用程序中,即 Pagination、LiveData、ViewModel。
Room 之前已经集成并经过测试,因此我可以从我的 DAO 课程中返回 DataSource.Factory<Integer, DbEntity>。这是我创建 PagedList 的 LiveData 的代码:
PagedList.Config pagedListConfig =
(new PagedList.Config.Builder()).setEnablePlaceholders(true)
.setPrefetchDistance(5)
.setPageSize(10)
.setInitialLoadSizeHint(10)
.build();
LiveData<PagedList<DbEntity>> dbEntities = new
LivePagedListBuilder<>(DAO.getItemList(timeNow), pagedListConfig).build();
我正在我的片段类中观察这个 livedata:
viewModel.dbEntities.observe(this, new Observer<PagedList<DbEntity>>() {
@Override
public void onChanged(@Nullable PagedList<DbEntity> inboxEntities) {
adapter.submitList(inboxEntities);
}
});
问题是列表绘制时间过长,似乎列表中的所有项目 (1300) 都是在第一次绘制时绘制的。
我在两个地方验证了这一点:onChanged 被调用,PagedList 大小等于 1300,适配器的onBindViewHolder 被调用,用于所有位置,直到 1300。
我在这里做错了吗?
【问题讨论】:
-
RecyclerView 是嵌套的吗? (PagedList.size() 返回列表的大小,包括任何尚未加载的空填充)
-
是的,回收站视图位于线性布局内。有什么关系?
-
因为嵌套可滚动视图没有任何意义...尤其是如果您将 wrap_content 设置为孩子的高度...请考虑一下...这意味着占据与孩子一样多的地方.. . 这意味着一次绑定所有孩子 ... 这意味着没有视图回收
-
知道了。顺便说一句,它在禁用占位符后返回正确的元素数。
标签: android android-architecture-components