Data binding 使用LiveData进行数据绑定-从popbackstack返回片段后,未进行UI更新

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

我有一个具有以下方法的viewmodel:

  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
}