Sim*_*mon 5 kotlin android-jetpack-compose
我有一个可组合的表示结果列表:
@Composable
fun ResultsList(results: List<Pair<Square, Boolean>>) {
val coroutineScope = rememberCoroutineScope()
val listState = rememberLazyListState()
LazyRow(state = listState) {
items(results) { result ->
ResultsItem(result.first, result.second)
coroutineScope.launch {
listState.animateScrollToItem(results.size)
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
预期行为:每当添加新项目时,列表都会平滑滚动到最后一项
实际行为:一切都很好,但是每当我手动快速滚动列表时,它也会自动放在底部。另外,滚动不流畅。
Phi*_*hov 11
您的代码给出以下错误:
对 launch 的调用应该发生在 LaunchedEffect 内部,而不是合成内部
您不应该通过直接从 Composable 函数调用副作用来忽略它。有关更多详细信息,请参阅副作用文档。
您可以改用LaunchedEffect
(如该错误所示)。通过提供results.size
密钥,您可以保证当列表大小发生变化时仅调用一次:
@Composable
fun ResultsList(results: List<Pair<Square, Boolean>>) {
val listState = rememberLazyListState()
LaunchedEffect(results.size) {
listState.animateScrollToItem(results.size)
}
LazyRow(state = listState) {
items(results) { result ->
ResultsItem(result.first, result.second)
}
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
5233 次 |
最近记录: |