gpt4 book ai didi

Android jetpack 导航组件来自对话框

转载 作者:行者123 更新时间:2023-12-03 13:25:39 26 4
gpt4 key购买 nike

到目前为止,我只使用导航组件成功地导航到对话框并返回。问题是,我必须在对话框中做一些事情并将结果返回到调用对话框的 fragment 。

一种方法是使用共享 View 模型。但是为此,我必须使用 .of(activity) ,即使我不再需要它,我的应用程序也会占用内存。

另一种方法是覆盖 show(fragmentManager, id) 方法,获得对 fragment 管理器的访问权,并从中访问前一个 fragment ,然后可以将其设置为目标 fragment 。我在实现回调接口(interface)之前使用了 targetFragment 方法,因此我的对话框可以通知 targetFragment 结果。但是在导航组件方法中,它感觉很笨拙,并且可能会在某个时候停止工作。

还有其他方法可以做我想做的事吗?也许有办法解决第一种方法的问题?

最佳答案

在 Navigation 2.3.0-alpha02 及更高版本中,NavBackStackEntry 允许访问 SavedStateHandle。 SavedStateHandle 是一个键值映射,可用于存储和检索数据。这些值在进程死亡(包括配置更改)中持续存在,并且通过同一个对象保持可用。通过使用给定的 SavedStateHandle,您可以在目的地之间访问和传递数据。这作为一种在从堆栈弹出后从目的地取回数据的机制特别有用。

要将数据从目标 B 传递回目标 A,首先设置目标 A 以在其 SavedStateHandle 上监听结果。为此,请使用 getCurrentBackStackEntry() API 检索 NavBackStackEntry,然后观察 SavedStateHandle 提供的 LiveData。

override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
val navController = findNavController();
// We use a String here, but any type that can be put in a Bundle is supported
navController.currentBackStackEntry?.savedStateHandle?.getLiveData("key")?.observe(
viewLifecycleOwner) { result ->
// Do something with the result.
}

}

在目的地 B 中,您必须使用 getPreviousBackStackEntry() API 在目的地 A 的 SavedStateHandle 上设置结果。
navController.previousBackStackEntry?.savedStateHandle?.set("key", result)

关于Android jetpack 导航组件来自对话框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56624895/

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