当我从一个可组合屏幕导航到另一个屏幕时,我试图保存/记住LazyColumn滚动位置。即使我将rememberLazyListState传递给LazyColumn,滚动位置在我返回到第一个可组合屏幕后也不会保存。有人能帮我解决这个问题吗?
@ExperimentalMaterialApi
@Composable
fun DisplayTasks(
tasks: List<Task>,
navigateToTaskScreen: (Int) -> Unit
) {
val listState = rememberLazyListState()
LazyColumn(state = listState) {
itemsIndexed(
items = tasks,
key = { _, task ->
task.id
}
) { _, task ->
LazyColumnItem(
toDoTask = task,
navigateToTaskScreen = navigateToTaskScreen
)
}
}
}
5条答案
按热度按时间oymdgrw71#
如果你真的想保存它,你必须把它保存在一个类似视图模型的地方。
remember
ed的东西只会持续到Composable被销毁。如果你导航到另一个屏幕,以前的Composable和滚动状态都会被销毁htrmnn0y2#
使用示例
taor4pac3#
上面我定义了一个helper函数,当组合对象被释放时,它可以保持滚动状态。所需要的只是一个带有滚动位置变量的ViewModel。
希望这对某人有帮助!
x8diyxa74#
上面我定义了一个helper函数,用于在组合对象被处理时保持滚动状态。所需的只是一个带有firstVisibleItemIdx和firstVisibleItemOffet变量的ViewModel。
wooyq4lh5#
LazyColumn
应在导航到下一个屏幕时保存滚动位置。如果不起作用,这可能是此处描述的一个错误(issue tracker)。基本上检查在更改屏幕时列表是否变空,例如,因为您观察到冷流或LiveData(因此使用初始值)。