如何使用Jetpack Compose AdapterList保持滚动位置?

时间:2020-06-10 23:31:37

标签: android kotlin android-jetpack-compose

我有一个使用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()
        })
    }
}

1 个答案:

答案 0 :(得分:0)

rememberScrollState()

我认为它可以被提取为一个值,或者可以使用 lerp() 函数,方法是使用 Layout()

为什么不改用lazycolumn?