【发布时间】:2022-08-03 00:30:19
【问题描述】:
给定一个有很多行的表,如果可能,我想使用分页进行查询。分页时,我还想根据数据库列对数据进行分组,并将该列用作每个组的节标题。
数据表:
Id, section, data1, data2
0, \"One\", 1, 2
1, \"One\", 2, 3
2, \"Two\", 40, 20
3, \"Two\", 11, 21
4, \"Three\", 110, 23
房间查询:
@Query(\"SELECT section, * FROM data GROUP BY section ORDER BY section ASC\")
fun getData(): PagingSource<Int, DataGroup>
data class DataGroup(
@ColumnInfo(name = \"section\") val section: String,
@Embedded val data: Data
)
然后在撰写中:
@Composable
private fun Data(
viewModel: DataViewModel = hiltViewModel()
) {
viewModel.lights,
val lazyItems: LazyPagingItems<DataGroup> = viewModel.data.collectAsLazyPagingItems()
LazyColumn() {
items(lazyItems) { item: DataGroup ->
// I can iterate each item by this is not grouped
}
}
}
编辑:再想一想,我不认为 SQL \"group by\" 是我所追求的。可能更像是:
@Query(\"SELECT section, * FROM data ORDER BY section ASC\")
fun getData(): List<Data>
和:
val groupedData = dao.getData.groupBy { it.section }
但是,那时我失去了分页的优势。可以通过分页实现按部分结果分组吗?
-
如果您使用的是compose,我认为最好自己实现分页列表而不是使用分页3。 paging3 有很多限制,试图绕过它们是很痛苦的。这是我实现的paged list,它可能会有所帮助。
标签: android-room android-jetpack-compose