首页 > 解决方案 > ViewModel 返回 ArrayList 大小为零

问题描述

我正在使用 AndroidPaging库从我的RecyclerView. 我能够正确查看数据,但是当我打印列表的大小时,它返回零。

以下是我的代码:

val itemViewModel =
                ViewModelProviders.of(this, MyViewModelFacotry(disciplineId, schoolId, yearId)).get(StudentInfoViewModel::class.java)
        activity?.let {
            itemViewModel.itemPagedList.observe(it, Observer<PagedList<StudentData>> { studentDataPagedList ->
                if(BuildConfig.DEBUG){
                    Log.i("MainActivity",studentDataPagedList?.size.toString())
                }
                studentInfoNameAdapter?.submitList(studentDataPagedList)
            })

            recyclerView.adapter = studentInfoNameAdapter
        }

Log语句始终打印为零。我想显示一个TextViewif 列表为空,但列表始终返回大小为零。

标签: androidkotlinandroid-viewmodelandroid-paging

解决方案


当您第一次收到时,如果作为配置提供,PagedList它可能是空的。setEnablePlaceholders(false)如果您想要或可以处理null值,您可以启用占位符。如果还没有数据,您可能需要研究不同的方法。

您可以使用自定义实现包装您的适配器,该实现正确委派数据集更改并在原始适配器没有项目时显示单个项目。

PagedList 文档说明了占位符:

占位符

PagedList 可以通过两种方式表示其尚未加载的数据 - 使用或不使用null占位符。

使用占位符,PagedList 始终是数据集的完整大小。get(N)返回N数据集中的第一项,或者null如果尚未加载。

如果没有null占位符,PagedList 是已加载数据的子列表。PagedList 的大小是当前加载项的数量,并get(N)返回第Nth 个加载项。这不一定是N数据集中的第一项。


推荐阅读