使用实时数据进行数据绑定 - 从弹出堆栈返回到片段后,不会进行 UI 更新



我有一个具有以下方法的视图模型:

private fun getCart(): LiveData<MenuCart?> {
return Transformations.switchMap(venueId) { venueId ->
venueId?.let {
repository.getMenuCart(it)
} ?: MutableLiveData<MenuCart?>(null)
}
}
fun getCartQty(): LiveData<Int> {
return Transformations.map(cartVal) {
it?.items?.count() ?: 0
}
}

还要在视图模型内定义以下字段:

val cartVal = getCart()
val cartQtyVal = getCartQty()

然后在 xml 内部在 TextView 中具有以下内容:

android:text="@{viewModel.cartQtyVal.toString()}"

xml的数据定义为:

<data>
<variable
name="viewModel"
type="mypackage.viewmodels.VenueMealsViewModel" />
</data>

在碎片里面,有这个:

override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?): View? {
val _binding = LayoutVenueMealsMenuBinding.inflate(inflater, container, false)
_binding!!.lifecycleOwner = this
_binding!!.viewModel = this.viewModel
return _binding!!.root
}

我在几个地方使用了类似的方法,它有效。但是在这种情况下,我看到了一个错误,在导航到另一个视图然后返回到此片段后,UI 不会使用 cartQtyVal 的最新值进行更新。知道为什么吗?由于数据绑定方法不起作用,因此我暂时不使用数据绑定,而是观察片段中的实时数据,该数据运行良好。

我认为主要问题是,当在弹出后退堆栈后重新创建片段时,我的视图模型中的开关图不会重新触发。我不得不将驱动开关图的输入变量的设置器移动到 onViewCreated 方法内部。

最新更新