rub*_*n94 6 android android-navigation koin android-jetpack android-architecture-navigation
我已经开始使用Android体系结构组件(导航和安全Args,视图模型)以及Koin库。
目前,我在两个片段之间传递参数时遇到了问题-我需要将一个字符串值从片段A传递到片段B,在片段B中修改此值,然后将其传递回片段A。
我找到了解决我的问题的一种可能的方法-共享视图模型。不幸的是,这种方法有一个问题,因为我可以在屏幕之间传递和修改值,但是当片段A导航到另一个目标时,共享视图模型中的值仍会存储而不清除。
在Android导航中的片段之间传递和修改数据是否有其他解决方案?我想避免手动清除此值(当碎片A被破坏时)。
zgl*_*uis 38
Android 刚刚为此发布了一个解决方案;在目的地(导航 2.3.0-alpha02)之间传递数据,基本上,在片段 A 中,您观察变量的变化,而在片段 B 中,您在执行之前更改该值popBackStack()。
片段A:
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<String>("key")?.observe(
viewLifecycleOwner) { result ->
// Do something with the result.
}
}
Run Code Online (Sandbox Code Playgroud)
片段B:
navController.previousBackStackEntry?.savedStateHandle?.set("key", result)
navController.popBackStack()
Run Code Online (Sandbox Code Playgroud)
小智 -7
1) 使用 action_A_to_B 和 SafeArgs 将字符串从片段 A 传递到片段 B。
2)popBackStack删除Fragment B。
navController.popBackStack(R.id.AFragment, false);
Run Code Online (Sandbox Code Playgroud)
或者
navController.popBackStack();
Run Code Online (Sandbox Code Playgroud)
3) 然后使用action_B_to_A将修改后的数据从B传递到A。
编辑。
这里有另一种解决方案