gpt4 book ai didi

android - 如何使用 Android 导航组件将值传回之前的 fragment 目标?

转载 作者:行者123 更新时间:2023-11-29 14:16:29 32 4
gpt4 key购买 nike

让我坐下,我有一些像这样的目的地

从 fragment A --> 到 fragment B --> 到 fragment C

我可以使用安全参数将数据从 fragment A 传递到 fragment B。也可以使用安全参数从 fragment B 到 fragment C。

如果我想将 fragment C 中生成的字符串带回 fragment B 或 fragment A 怎么办?

要从 fragment C 导航到 fragment B,我使用代码:

Navigation.findNavController(fragmentView).navigateUp()

为了从 fragment C 导航到 fragment A,我使用代码:

Navigation.findNavController(view).popBackStack(R.id.fragmentA, false)

那么如何将值传递回先前的 fragment 目标?我是否必须从 fragment C 返回到 fragment B 并通过安全参数传递值?

真的需要你的帮助。非常感谢:)

最佳答案

您可以使用以下代码 fragment 将数据发送到上一个 fragment 。

fragment A观察数据:

override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
findNavController().currentBackStackEntry?.savedStateHandle?.getLiveData<String>("key")?.observe(viewLifecycleOwner) { data ->
// Do something with the data.
}
}

fragment B发送数据:

findNavController().previousBackStackEntry?.savedStateHandle?.set("key", data)
findNavController().popBackStack()

我还为此编写了扩展。

fun <T : Any> Fragment.setBackStackData(key: String,data : T, doBack : Boolean = true) {
findNavController().previousBackStackEntry?.savedStateHandle?.set(key, data)
if(doBack)
findNavController().popBackStack()
}

fun <T : Any> Fragment.getBackStackData(key: String, result: (T) -> (Unit)) {
findNavController().currentBackStackEntry?.savedStateHandle?.getLiveData<T>(key)?.observe(viewLifecycleOwner) {
result(it)
}
}

用法:

fragment A:

getBackStackData<String>("key") { data ->
// Do something with the data.
}

fragment B:

setBackStackData("key",data)


注意:我使用字符串作为数据。您可以使用任何其他类型的变量。

注意:如果您要使用类作为数据,请不要忘记添加 @Parcelize 注释并扩展 Parcelable

关于android - 如何使用 Android 导航组件将值传回之前的 fragment 目标?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57541080/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com