我正在使用 Compose 制作的搜索页面,一切正常,除了在数据更改时返回到第一项LazyColumn
的想要行为。LazyColumn
这是我对惰性列的实际实现:
@Composable
fun <DataType : Any> GenericListView(
itemsList: SnapshotStateList<DataType>, // this list comes from the search page viewmodel
modifier: Modifier = Modifier.fillMaxSize(),
spacing: Dp = 24.dp,
padding: PaddingValues = PaddingValues(0.dp),
item: @Composable (DataType) -> Unit
) {
val listState: LazyListState = rememberLazyListState()
val coroutineScope = rememberCoroutineScope()
LazyColumn(
verticalArrangement = Arrangement.spacedBy(spacing),
state = listState,
modifier = modifier.padding(padding)
) {
items(itemsList) {
item(it)
}
}
SideEffect {
Log.i("->->->->->->->", "side effect launched")
coroutineScope.launch {
listState.scrollToItem(0)
}
}
}
正如文档所说,SideEffect
应该在每次重构函数时调用,但它似乎只在带有断点的调试模式下工作SideEffect
,否则,它只在第一次创建整个页面时工作。
我已经尝试过使用LaunchedEffect
而不是SideEffect
使用itemsList
as key
,但什么也没发生。
为什么我的代码只能在调试模式下工作?或者更好的是,在设置新数据时已经制定了重置位置的可行解决方案?