可以通过使用Jetpack Navigation组件中的限制操作符实现不同导航技术栈之间的活动结果交互。该限制操作符允许子模块向父模块传递结果。假设我们要从一个使用不同导航技术栈的子模块返回结果,并将结果传递给父模块的ViewModel,则可以按以下步骤进行:
在子模块的目标Fragment中设置一个resultLiveData变量作为结果返回到父模块。
val resultLiveData = MutableLiveData()
使用导航组件的NavController从子模块目标Fragment中返回结果。
fun setResult(result: Result) {
val bundle = bundleOf("RESULT_KEY" to result)
findNavController().apply {
previousBackStackEntry?.savedStateHandle?.set("RESULT_KEY", bundle)
popBackStack()
}
}
在父模块的目标Fragment中使用限制操作符获取结果。
// 获取bundle中的结果
val resultBundle = requireActivity().intent.getBundleExtra("android-support-nav:controller:deepLinkIds")?.getBundle("RESULT_KEY")
val result = resultBundle?.getParcelable("RESULT_KEY")
获取结果后更新ViewModel,并触发相应的UI更新。
result?.let {
viewModel.updateResult(it)
}
在父模块的目标Fragment中观察ViewModel以接收更新,并进行相应的UI处理。
viewModel.result.observe(viewLifecycleOwner, Observer { result ->
// 处理UI更新逻辑
})
上一篇:不同单元格应用条件格式规则
下一篇:不同岛屿的数量