首页 > 解决方案 > 如何在android中同时从两个livedata中获取价值

问题描述

private var purchaseArrayList = ArrayList<PurchaseModelWithId>() //初始化第一个数组列表

private var saleArrayList = ArrayList<SaleModelWithId>()//初始化第二个数组列表

purchaseViewModel.showPurchaseItems(requireContext()).observe(viewLifecycleOwner, { purchaseList->
                    purchaseArrayList = purchaseList as ArrayList<PurchaseModelWithId>

                    saleViewModel.saleLiveData(requireContext()).observe(viewLifecycleOwner, saleList -> {
                        saleArrayList = saleList as ArrayList<SaleModelWithId>
                        
                        //here I want two arraylist value but above code not works for me
       })

 })

提前致谢

标签: androidviewmodelandroid-livedatamutablelivedata

解决方案


当您调用 showPurchaseItems() 时,将在将值设置为您的实时数据之前执行 return。

因此,当您在回调方法中为实时数据设置值时,请避免返回实时数据值。

首先将 showPurchaseItems() 方法和 saleLiveData() 方法设为 void 方法。

然后创建 getter 方法来获取 viewmodel 中 finalPurchaseList、saleList 的值。

public MutableLiveData<yourReurnType> getFinalPurchaseList(){

return finalPurchaseList;
}

public MutableLiveData<yourReurnType> getSaleList(){

return saleList;
}

然后在您的活动中调用您的两种方法来为您的实时数据设置值。之后观察实时数据。

showPurchaseItems();
saleLiveData();

viewmodel.getFinalPurchaseList().(requireContext()).observe(viewLifecycleOwner){}

viewmodel.getSaleList().(requireContext()).observe(viewLifecycleOwner){


}

请注意:在一个活动/片段中使用两个视图模型不是好的做法。


推荐阅读