我正在從 a 導航Fragment到 a DialogFragment。我想做的DialogFragment是在我Fragment做某事時注意到這一點。
我正在嘗試更新 aLiveData但由于某種原因,當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)
}
uj5u.com熱心網友回復:
首先,您的 DialogFragment 和 MyFragment 沒有共享同一個 MyViewModel 實體。
為了實作您的目標,您應該查看此檔案: https ://developer.android.com/guide/navigation/navigation-programmatic#additional_considerations
您將從 MyFragment 打開 DialogFragment,然后從 DialogFragment 觀察結果。
如果要共享 ViewModel 的同一實體,請更改為使用 activityViewModel() (而不是使用 viewModel() )
uj5u.com熱心網友回復:
您可以使用介面來偵聽關閉事件。這是一個簡單的方法
首先,創建界面并將其放入您的對話框片段中:
interface CloseListener {
fun onClose()
}
class YourDialog(private val listener: CloseListener) : DialogFragment() {
override fun onDismiss(dialog:DialogInterface){
listener.onClose()
}
}
然后,在您的片段中,像這樣呼叫 dialogfragment :
val yourDialog = YourDialog(object: CloseListener{
override fun onClose() {
//do something here, such as set value for your viewModel
}
})
yourDialog.show(childFragmentManager, null)
希望它可以幫助你
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/514031.html
標籤:安卓科特林安卓片段安卓实时数据android-dialogfragment
上一篇:在pandas中映射一個指標
