【问题标题】:Android Navigation Component - Implementing ListenerAndroid 导航组件 - 实现监听器
【发布时间】:2021-01-03 22:17:54
【问题描述】:
所以我正在使用导航组件,而我现在正在尝试做的事情是实现一个侦听器,用于当用户单击对话框中的按钮时。在另一个片段中,我想检测这种情况何时发生。
过去,我只是在对话框中创建一个界面,然后在按钮的 onClick 中调用该界面的函数。然后在片段中,我将通过为对话框设置一个变量并调用 set 函数来设置侦听器,并在片段中实现接口函数。比如:
dialogFrag.setListener(this)
但是对于导航组件,我不知道该怎么做,因为我一直在处理如下导航:
findNavController().navigate(R.id.dialogName)
知道怎么做吗?
【问题讨论】:
-
-
一种方法是使用 NavArgs 并将高阶函数传递给您需要实现它的对话框,然后您可以在对话框中调用它。
标签:
android
kotlin
android-architecture-navigation
【解决方案1】:
如上所述here
我将复制他的解决方案
Android 导航架构组件
例如:
假设您使用 navController 从 Fragment A 打开 Fragment B。
并且您想要从片段 B 到片段 A 的一些数据。
class B :BottomSheetDialogFragment() {
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
val root = inflater.inflate(R.layout.your_layout, container, false)
root.sampleButton.setOnClickListener {
val navController = findNavController()
navController.previousBackStackEntry?.savedStateHandle?.set("your_key", "your_value")
dismiss()
}
}
在您的片段 A 中:
findNavController().currentBackStackEntry?.savedStateHandle?.getLiveData<String>("your_key")
?.observe(viewLifecycleOwner) {
if (it == "your_value") {
//your code
}
}