Jetpack Compose:如何跨页面/可组合保持 UI 状态?

时间:2021-04-21 15:18:24

标签: android android-jetpack android-jetpack-compose

有没有办法保存可组合的 UI 状态,以便在可组合之间切换时,它们的 UI 状态与离开视图时的状态相同?

我已经尝试使用 rememberLazyListState()(它使用 rememberSaveable)来保存 LazyColumn 的滚动状态,但是当返回到 Composable 时它似乎不起作用。< /p>

有什么想法吗?

编辑:我使用 NavController 来处理 Composable 之间的导航

1 个答案:

答案 0 :(得分:0)

我刚刚想出了怎么做。这个想法是将 LazyListState 提升到管理视图导航的可组合。

@Composable
fun AppScreenNav(screen: Screen) {
    val listState = rememberLazyListState()
    when (screen) {
        Screen.Home -> Home()
        Screen.Favorites -> Favorites(listState)
    }
}

@Composable
fun Favorites(listState: LazyListState) {
    val favorites: List<String> by rememberSaveable { mutableStateOf(List(1000) { "Favorites $it" }) }
    LazyColumn(
        state = listState
    ) {
        items(favorites) { item ->
            Text(
                color = Color.Black,
                text = item,
            )
        }
    }
}

这里我们将列表状态提升到父组件。在 Home()Favorites() 可组合之间切换时,列表滚动状态应保持相同。