问题描述
我用 4 个片段实现了导航组件:
F1 -> F2 -> F3 -> F4
要从 F1 -> F2 导航,我使用:
val bundle = bundleOf("cityName" to cityName)
findNavController().navigate(R.id.second_fragment,bundle)
现在,我想将“cityName”一直传播到 F4。从 F2 -> F3 和 F3 -> 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 绑定到它