android - 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
语句始终打印为零。我想显示一个TextView
if 列表为空,但列表始终返回大小为零。
解决方案
当您第一次收到时,如果作为配置提供,PagedList
它可能是空的。setEnablePlaceholders(false)
如果您想要或可以处理null
值,您可以启用占位符。如果还没有数据,您可能需要研究不同的方法。
您可以使用自定义实现包装您的适配器,该实现正确委派数据集更改并在原始适配器没有项目时显示单个项目。
PagedList 文档说明了占位符:
占位符
PagedList 可以通过两种方式表示其尚未加载的数据 - 使用或不使用
null
占位符。使用占位符,PagedList 始终是数据集的完整大小。
get(N)
返回N
数据集中的第一项,或者null
如果尚未加载。如果没有
null
占位符,PagedList 是已加载数据的子列表。PagedList 的大小是当前加载项的数量,并get(N)
返回第N
th 个加载项。这不一定是N
数据集中的第一项。
推荐阅读
- codeigniter - 动态显示单个配置文件图像
- ajax - 使用ajax发布带有url的id
- angular - 角度如何使用laravel api在登录时检查用户密码和电子邮件
- javascript - 如何使用索引检查项目是否在本地存储中(特殊情况)
- python - ModuleNotFoundError:CentOS 7 上没有名为“matplotlib”的模块
- laravel - 更改默认用户名和密码后,Laravel 登录无法正常工作
- javascript - Javascript对象数组排序问题
- c - 如何检查输入是数字(浮点)还是某个字符?
- java - 编辑内置于 react.js 的源代码的缺点
- python - Python Dlib 使用面部标记进行裁剪