Android 是否有一种方法可以向片段视图发出信号,表明数据已传递到参数中?
我正在尝试开发一个应用程序,其中我在片段中有微调器(第一个片段),要更新微调器选项,用户必须打开一个对话框窗口(第二个片段)并在其中输入。数据作为一个包通过接口传递,然后进入第一个片段参数。我的微调器位于第一个片段视图中,因此我无法理解如何从第二个参数调用第一个参数视图函数,相反,在第一个参数视图中,我不断检查参数是否更新,类似这样Android 是否有一种方法可以向片段视图发出信号,表明数据已传递到参数中?,android,android-studio,kotlin,Android,Android Studio,Kotlin,我正在尝试开发一个应用程序,其中我在片段中有微调器(第一个片段),要更新微调器选项,用户必须打开一个对话框窗口(第二个片段)并在其中输入。数据作为一个包通过接口传递,然后进入第一个片段参数。我的微调器位于第一个片段视图中,因此我无法理解如何从第二个参数调用第一个参数视图函数,相反,在第一个参数视图中,我不断检查参数是否更新,类似这样 if(!displayedText.isNullOrEmpty()) { updateListSpinner()
if(!displayedText.isNullOrEmpty()) {
updateListSpinner()
arguments?.clear()
}
因此,在片段视图中,我经常检查参数是否更新,然后清除它们,一切都正常工作,但我只是想知道有什么更好的方法来完成它。您可以使用片段结果侦听器。更多文档:。因此,在您的实例中,每当用户与对话框片段交互时,将结果发送到第一个片段,该片段将被注册以使用数据,您可以更新微调器 以下是一些在我的应用程序中控制导航的工作代码: 在第二段中:
open fun navigate(idOfDestination: Int, bundle: Bundle?) {
val tempBundle = bundle ?: Bundle()
tempBundle.putInt(NAVIGATION_DESTINATION, idOfDestination)
activity?.supportFragmentManager?.setFragmentResult(NAVIGATION_RESULT, tempBundle)
}
在target fragment(在您的情况下,它将是第一个片段)中,注册侦听器:
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
activity?.supportFragmentManager?.setFragmentResultListener(NAVIGATION_RESULT, this, FragmentResultListener { _, bundle ->
val destination = bundle.getInt(NAVIGATION_DESTINATION)
bundle.remove(NAVIGATION_DESTINATION)
navigationHandler(bundle,destination)
})
}
private fun navigationHandler(bundle: Bundle?, idOfDestination: Int) {
navController = Navigation.findNavController(binding.root)
if (!FeatureControlManager.isDestinationAllowedToGo(idOfDestination)) {
navController = childFragmentManager.fragments.first().findNavController()
}
navController.validateAndNavigate(navController, idOfDestination, childFragmentManager, bundle)
}
这适用于viewmodel,对吗?我试图用没有mvvm的接口实现它,但我想mvvm是片段通信的最佳方法?@Michal,不,这只是片段,你不需要ViewModel.supportFragmentManager.setFragmentResultListener现在在“androidx.fragment:fragment ktx:1.3.0”中不可用。我想从2月21日起就可以了。