【问题标题】:pagedList loading all items at oncepagedList 一次加载所有项目
【发布时间】: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


【解决方案1】:

搞定了。它在禁用占位符后返回正确的元素数

【讨论】:

  • 嘿,我遇到了完全相同的问题,但我的 RV 没有嵌套或其他什么,我只是使用带有 FrameLayout 作为父级的片段。 “禁用占位符”是什么意思?
猜你喜欢
  • 2021-09-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-21
  • 2021-06-18
  • 1970-01-01
  • 2019-12-26
相关资源
最近更新 更多