Data binding 使用LiveData进行数据绑定-从popbackstack返回片段后,未进行UI更新
我有一个具有以下方法的viewmodel:Data binding 使用LiveData进行数据绑定-从popbackstack返回片段后,未进行UI更新,data-binding,android-livedata,Data Binding,Android Livedata,我有一个具有以下方法的viewmodel: private fun getCart(): LiveData<MenuCart?> { return Transformations.switchMap(venueId) { venueId -> venueId?.let { repository.getMenuCart(it) } ?: MutableLiveData<Men
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
}
}
然后,内部xml具有以下内部文本视图:
android:text="@{viewModel.cartQtyVal.toString()}"
xml的数据定义为:
<data>
<variable
name="viewModel"
type="mypackage.viewmodels.VenueMealsViewModel" />
</data>
我在一些地方使用了类似的方法,而且效果很好。但是在本例中,我看到了一个bug,在导航到另一个视图,然后返回到这个片段后,UI没有使用最新的cartQtyVal值进行更新。你知道为什么吗?由于数据绑定方法不起作用,我暂时不使用数据绑定,而是观察片段内的实时数据,这非常有效。我认为主要的问题是,当片段在pop backbackback后重新创建时,我的视图模型中的开关映射不会重新触发。我必须将驱动switchmap的输入变量的setter移到onViewCreated方法中。我认为主要的问题是,当片段在pop backstack后重新创建时,视图模型中的switchmap不会重新触发。我必须将驱动switchmap的输入变量的setter移到onViewCreated方法中
<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
}