问题非常简单,我不知道为什么以前没有人提出过。
我必须从数据库查询大量数据,然后逐个在
我只想加载用户可见的
我该如何实现?
以下是我的代码,但无法正常工作:
我必须从数据库查询大量数据,然后逐个在
HorizontalPager
中显示。如果一次加载所有数据,在组合HorizontalPager
之前,它需要太长时间来加载,用户必须长时间看到CircularProgressIndicator
。我只想加载用户可见的
HorizontalPager
页面的数据。所以应该像这样进行:
- 在索引=0时,仅加载第0页的数据,并在加载时显示
CircularProgressIndicator
- 在索引=1时,仅加载第1页的数据,并在加载时显示
CircularProgressIndicator
我该如何实现?
以下是我的代码,但无法正常工作:
val map by viewModel.statementWithTransMap.collectAsStateWithLifecycle()
HorizontalPager(
modifier = Modifier.fillMaxSize(),
state = horizontalPagerState,
count = statementIds.size
) { index ->
LaunchedEffect(Unit) {
val id = statementIds[index]
viewModel.loadStatementByStatementId(index, id)
}
val item = map[index]
if (item == null) {
Box(modifier = Modifier.fillMaxSize()) {
CircularProgressIndicator(
modifier = Modifier.align(Alignment.Center)
)
}
return@HorizontalPager
}
Page(item)
}
我的视图模型中相关的代码是:
fun loadStatementByStatementId(index: Int, statementId: Int) {
viewModelScope.launch {
getStatementsWithTranslationByStatementIdUseCase(statementId).collect {
loadedStatements[index] = it
_statementWithTransMap.value = loadedStatements
}
}
}