android - 如何使用 Jetpack Compose AdapterList 保留滚动位置?

标签 android kotlin android-jetpack-compose

我有一个使用 Jetpack Compose 构建的具有列表详细信息流的应用程序。我想保留滚动位置从详细信息 View 返回到 ListView 时。

基于模型状态交换表面:

@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()
        })
    }
}

最佳答案

rememberScrollState() ?
我认为可以将其提取为一个值,或者可以使用 lerp() 函数,方法是将其设为自定义 Composable,而不是使用 Layout()为什么不使用惰性列呢?

关于android - 如何使用 Jetpack Compose AdapterList 保留滚动位置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62314777/

相关文章:

android - 我是否需要运行时权限检查才能写入棉花糖中的 getExternalFilesDir() 路径?

java - 解析 Yelp API v2 JSON 空指针异常

java - 如何在选择时在卡片 View 上添加一个框?

android - 如何使用导航图而不默认加载 fragment ?

android - Jetpack Compose 中的 Canvas 重构

android - Modifier.preferredSize 和 Modifier.prefferredHeight 的未解决引用

android - XBox 360 TCP 堆栈不响应具有 0 字节有效负载的 TCP 零窗口探测

java - 如何在 Kotlin 中向 Gson 注册一个 InstanceCreator?

Kotlin:filterNotNull 用于 Map<K,V?> 中的值

android-jetpack-compose - Jetpack 撰写 : how to cut out card shape?