我应该在带有 4 个片段的导航组件中将 cityName 添加到 Bundle 多少次? 备选方案 1备选方案 2

问题描述

我用 4 个片段实现了导航组件:

F1 -> F2 -> F3 -> F4

要从 F1 -> F2 导航,我使用:

val bundle = bundleOf("cityName" to cityName)
findNavController().navigate(R.id.second_fragment,bundle)

现在,我想将“cityName”一直传播到 F4。从 F2 -> F3F3 -> F4 导航时是否也需要做同样的事情,还是只做一次就足够了,就像我已经做过的那样?

解决方法

如果使用参数,则需要将它们从一个片段传播到另一个片段,因为每个片段可以有不同的参数集。您可以使用 Safe Args plugin 改进这一点。

备选方案 1

在单个活动的情况下,可以轻松定义 shared view model 来控制应用的常见 ui 部分(例如应用栏标题)

interface HostViewModel {
    
    val screenTitle: LiveData<String>

    fun setScreenTitle(title: String)
}

备选方案 2

您可以为您的流程创建 nested graph (F1->...->F4) 并将 destination view model 绑定到它