向后导航时恢复视图模型状态

问题描述 投票:0回答:1

我有一个关于如何处理项目中特定情况的后退导航的问题。基础知识看起来像这样:

我有一个教程(全部用 Compose 编写),分为三个不同的部分,每个部分都有自己的视图模型和导航图。这是它的大致样子:

@Composable
Section1HostScreen() {
    val section1VM: Section1ViewModel
    NavHost() {
        composable<ScreenA>
        composable<ScreenB>
        composable<ScreenC>
        composable<ScreenD>
        composable<Section2HostScreen>
    }
}

一旦我们导航到

Section2HostScreen
,我们就会得到与第一部分的主机屏幕类似的设置,带有
Section2ViewModel
和一系列屏幕,然后将进入第 3 部分的主机屏幕。

我遇到的问题是,如果用户从第 2 部分的初始

Screen E
导航回来,我希望他们能够返回到第 1 部分中的
ScreenD
,并显示他们离开时的 UI 状态,这目前不起作用,因为视图模型现在已经消失了。

实现这一目标的最佳方法是什么?我所面临的唯一限制是我需要将视图模型分开,因此我无法使用一个视图模型来管理整个教程流程,因为当多人进行更改时,会导致臃肿且难以解决合并冲突。感谢您的帮助。

android android-jetpack-compose android-viewmodel android-navigation
1个回答
0
投票

您当前的设置将有一个非常深的 backStack。想象一下,如果您有 10、15 个部分,导航图会是什么样子。我建议您使用嵌套图或拥有一个托管所有部分的父级 NavHost,并将导航逻辑传递到每个部分的第一个和最后一个屏幕。

关于保留 UI 状态,如果您想“永久”保留 UI 状态(即用户从 Screen7 返回到 Screen1 并仍然具有相同的状态),您可以实现一个小型数据库或 DataStore 来获取简单值只需让您的 ViewModel 从中获取状态即可。如果您只想在背靠背屏幕上保留简单状态,那么您可以为您的 ViewModel 实现 SavedStateHandle

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.