我有一个使用Jetpack Compose构建的具有列表详细信息流的应用程序。从详细信息视图返回到列表视图时,我想保留滚动位置。
根据“模型”状态交换表面:
@Composable
private fun AppContent() {
val scrollerPosition = ScrollerPosition()
Crossfade(State.currentScreen) { screen ->
Surface(color = MaterialTheme.colors.background) {
when (screen) {
is Screen.List -> ListScreen(scrollerPosition)
is Screen.Details -> DetailsScreen(screen.transaction)
is Screen.New -> NewScreen()
}
}
}
}
ListScreen曾经有一个VerticalScroller,我给它提供了ScrollerPosition以在屏幕更改后保留位置。但是,此解决方案不适用于AdapterList。
这是过去的样子:
@Composable
private fun TransactionsList(modifier: Modifier, scrollerPosition: ScrollerPosition) {
Box(modifier = modifier.fillMaxSize().wrapContentSize(Alignment.Center)) {
VerticalScroller(scrollerPosition = scrollerPosition) {
AdapterList(State.transactions, itemCallback = { transaction ->
TransactionListRow(transaction)
ListDivider()
})
}
}
}
如何使AdapterList保留滚动位置?
@Composable
private fun TransactionsList(modifier: Modifier, scrollerPosition: ScrollerPosition) {
Box(modifier = modifier.fillMaxSize().wrapContentSize(Alignment.Center)) {
AdapterList(State.transactions, itemCallback = { transaction ->
TransactionListRow(transaction)
ListDivider()
})
}
}
答案 0 :(得分:0)
rememberScrollState()
?
我认为它可以被提取为一个值,或者可以使用 lerp() 函数,方法是使用 Layout()
为什么不改用lazycolumn?