首页 > 解决方案 > Android Navigation Safe Args 传递 LiveData 和 Lambda 变量

问题描述

对于一个简单的Fragment A -> Fragment B图表,我有两个问题:

  1. 我可以LiveData使用安全参数通过吗?如果没有,我该如何收听Fragment Bfrom的值变化Fragment A

  2. 我可以使用安全 args传递 lambda 变量(函数) (充当回调侦听器)吗?

标签: androidandroid-jetpackandroid-navigationandroid-navigation-graphandroid-safe-args

解决方案


你不能使用安全的参数传递 LiveData 但你可以使用Fragment Result API来监听其他 Fragment 中的值变化

// in fragment A
setFragmentResultListener("requestKey") { requestKey, bundle ->
    // read bundle here
}
// in fragment B
setFragmentResult("requestKey", bundle)

它可以与您的 SafeArgs 类结合使用:

setFragmentResultListener("requestKey") { requestKey, bundle ->
    val args = MyFragmentArgs.fromBundle(bundle)
}
// Fragment B
setFragmentResult("requestKey", MyFragmentArgs(...).toBundle())

推荐阅读