android - 带参数的导航组件 .popBackStack()

标签 android android-fragments android-architecture-navigation

我有两个 fragment 。 SecondFragmentThirdFragment。实际上,我使用导航组件在 fragment 之间传递值。像这样:

第二个 fragment :

val action = SecondFragmentDirections.action_secondFragment_to_thirdFragment().setValue(1)

Navigation.findNavController(it).navigate(action)

下面是我如何从 ThirdFragment 读取值:

 arguments?.let {
           val args = ThirdFragmentArgs.fromBundle(it)
           thirdTextView.text = args.value.toString()
       }

工作正常。现在我的堆栈是这样的:

ThirdFragment

SecondFragment 

是否有任何选项可以使用新的导航组件将值从打开的 ThirdFragment 传递到之前的 SecondFragment? (当 ThirdFragment 完成时)

我知道 onActivityResult,但如果 Nav.Component 提供比我想要的更好的解决方案,请使用它。

谢谢!

最佳答案

这个答案有点晚了,但有人可能会发现它很有用。在导航组件库的更新版本中,现在可以在向后导航时传递数据。

假设栈是这样的

fragment A --> fragment B。

我们现在在 FragmentB 中,我们想在返回 FragmentA 时传递数据。

FragmentA 中,我们可以创建一个带有键的观察者:

override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
val navController = findNavController()
// Instead of String any types of data can be used
navController.currentBackStackEntry?.savedStateHandle?.getLiveData<String>("key")
    ?.observe(viewLifecycleOwner) { 

    }
}

然后在 FragmentB 中,如果我们通过访问先前的返回堆栈条目更改它的值,它将传播到 FragmentA 并且观察者将收到通知。

val navController = findNavController()
navController.previousBackStackEntry?.savedStateHandle?.set("key", "value that needs to be passed")
navController.popBackStack()

关于android - 带参数的导航组件 .popBackStack(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51326437/

相关文章:

java - 控制java中的循环执行速度 - Android

自定义 fragment (NPE)内的Android Maps V2 MapView

android - 如何将按钮添加到 Fragment TabHost

android - 如何使用 GridView 适配器回收位图?

back-stack - Android 架构导航 - 如何导航到导航图构建返回堆栈中的特定位置

android - 为什么Android导航组件屏幕不会回到上一个Fragment,而是调用上一个Fragment的onViewCreated中的一个方法?

java - 反编译 Apk 文件后,我得到数字而不是常量。如何获取这些数字的字符串值?

java - Activity 生命周期。用户始终离线

java - 在 SlidingTabslayout 中的两个选项卡 fragment 之间传递数据

android - 共享元素更新图片来源