我正在从Fragment
导航到DialogFragment
。我想做的是注意到这个DialogFragment
在我的Fragment
中被忽略了,以便做一些事情。
我尝试这样做更新一个LiveData
,但由于某种原因,当DialogFragment
关闭时,LiveData
的值永远不会像我试图做的那样为真。
我的片段:
private val myViewModel: MyViewModel by viewModel() //Using Koin
btn1.setOnClickListener{
findNavController().navigate(R.id.my_dialog_fragment)
}
myViewModel.dialogFragmentIsClosed.observe(viewLifecycleOwner){isClosed->
if(isClosed)
//do something
}
我的视图模型:
private val _dialogFragmentIsClosed = MutableLiveData(false)
val dialogFragmentIsClosed: LiveData<Boolean> get() = _dialogFragmentIsClosed
fun isDialogFragmentClosed(closed:Boolean){
_dialogFragmentIsClosed.postValue(closed)
}
对话片段:
private val myViewModel: MyViewModel by viewModel() //Using Koin
override fun onDismiss(dialog:DialogInterface){
myViewModel.isDialogFragmentClosed(true)
val bundle = bundleOf(Pair("argBoolean",true))
findNavController().navigate(R.id.my_fragment,bundle)
}
2条答案
按热度按时间ogsagwnx1#
您可以使用一个接口来侦听dismiss事件。
首先,创建界面并将其放入对话框片段中:
然后,在您的片段中,像这样呼叫dialogfragment:
希望能对你有所帮助
q5lcpyga2#
首先,您的DialogFragment和MyFragment没有共享MyViewModel的同一个示例。
要实现您的目标,您应该查看以下文档:https://developer.android.com/guide/navigation/navigation-programmatic#additional_considerations
您将从MyFragment中打开DialogFragment,然后从DialogFragment中观察结果。
如果要共享ViewModel的同一个示例,请改为使用activityViewModel()(而不是使用viewModel())