我有一个Viewmodel
,其中包含一些Livedata
参数。这些Livedata
参数的(clickedItem
)更改之一旨在触发DialogFragment
。
在DialogFragment
的{{1}}方法中,我正在提取并使用上述OnCreateDialog(savedInstanceState: Bundle?)
参数中的数据来做某件事。
这是Livedata
观察者方法:
clickedItem
这是clickedItem.observe(viewLifecycleOwner, Observer { clickedItem ->
if (clickedItem != null && !dialogIsDisplayed) {
showAddItemDialog()
}
})
的{{1}}方法:
DialogFragment
这是OnCreateDialog(savedInstanceState: Bundle?)
方法:
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
return activity?.let {
val builder = AlertDialog.Builder(it)
binding = DataBindingUtil.inflate(
requireActivity().layoutInflater,
R.layout.business_inventory_selection_item_dialog, null, false
)
//Attach viewmodel to this fragment.
setupViewModel()
builder.setView(binding.root)
bindView(viewModel.clickedItem.value!!)
builder.create()
} ?: throw IllegalStateException("Activity cannot be null")
}
现在的问题是:当我尝试使用包装在setupViewModel()
中的数据时,我发现它具有上次更改时的数据,而不是导致{ {1}}触发。
在开始利用private fun setupViewModel() {
activity?.run {
viewModel = ViewModelProviders.of(this)
.get(BusinessInventorySelectionViewModel::class.java)
with(viewModel) {
itemBrand.value = null
unitOfMeasurement.value = null
}
}
bindViewModel()
}
private fun bindViewModel() {
binding.apply {
businessinventoryselectionviewmodel = viewModel
lifecycleOwner = this@ItemSelectionDialogFragment
}
}
内部的最新数据之前,我被迫浏览了clickedItem
中存储的所有数据。
答案 0 :(得分:0)
我找到了解决此问题的方法,
我没有在DialogFragment
方法中调用clickedItem
,而是在clickedItem
方法中调用了它:
bindView(viewModel.clickedItem.value!!)
这解决了问题。