android - Android 分页和分组模型
问题描述
我有类似 MVVM 的架构,数据流如下:
我在 SQLite 中有数据(图像 src url + 链接数据)
我有这样的存储库层和方法:
fun <T> getPhotos(): LiveData<PagedList<PhotoInfo>>
我正在使用
androidx.paging
库 v.2,它是PagedListAdapter
我的适配器RecyclerView
现在我想按某个字段对数据进行分组,按日期对数据进行分组,并且能够将分组设置为水平(水平滚动)或垂直。
我浏览了类似问题的现有答案和解决方案,以下是我发现的选项:
选项1
我可以更新查询以分组数据并插入“特殊”行作为分隔符。然后在适配器中,我可以有一些分支逻辑来处理“常规”行和“分隔符”。
我不喜欢这个选项,因为它涉及 SQL 查询的这种不受欢迎的更改。我也无法想象在这种情况下如何实现“水平”组滚动。
选项 2
我可以有嵌套的回收器视图,但在这种情况下,我不知道如何更新我的代码,以便我可以PagedList<PhotoGroup>
从 'linear' 获得PagedList<PhotoInfo>
。
我唯一能想到的:
- 在存储库中有两个方法,它们返回“分页”数据,用于特定组中的组和项目,例如:
fun <T> getPhotoGroups(): LiveData<PagedList<PhotoGroup>>
fun <T> getPhotosForGroup(groupId: Long): LiveData<PagedList<PhotoInfo>>
- 每个组都有自己的 PagedList 和 RecyclerView。
但我担心它可能过于复杂并且可能会产生开销。如果我的父 RecyclerView 和子 RecyclerView 在同一方向(垂直),也不确定它会正常工作
我有一种强烈的感觉,我错过了一些东西,并且把事情复杂化了。
解决方案
推荐阅读
- java - 删除未使用的文件后,Drawables 链接失败
- java - 迷宫生成给我一个堆栈溢出错误
- perl - 按多列对表格数据进行分组
- java - 我如何在 Spring Security oauth2 中进行权限访问控制?
- bash - 带有换行符的 Bash 变量在 csv 文件中未正确表示
- typescript - 使用 process.exit 进行 TypeScript 推理
- laravel - 拉拉维尔 5.8。如何在验证期间修剪 http 并检查表中的唯一性?
- docker - 如何在 CI 构建期间减少 docker pull 时间?
- python - 克服 SSL:使用 urllib3 时 Windows 10 上的 CERTIFICATE_VERIFY_FAILED
- css - 大边框大小的问题(不是完整的矩形)