Jetpack Compose:滚动到事件列表底部

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)