一个LiveData中的多个对象

时间:2018-02-07 16:06:23

标签: android viewmodel android-lifecycle android-room android-livedata

我有这个实体:

@Entity
public class CartItem {
    @PrimaryKey(autoGenerate = true)
    private long id;
    private long itemId;
    private long serviceId;
    private String observation;
    @Ignore
    private Service service;
    @Ignore
    private Item item;
}

正如您所看到的那样,它由其他对象组成,在这种情况下,ServiceItem

在片段中我以这种方式实现LiveData:

CartItemViewModel model = CartItemViewModel.create(getActivity());
model.getLiveData().observe(this, new Observer<List<CartItem>>() {
    @Override
    public void onChanged(@Nullable List<CartItem> cartItems) {

}

它正常工作,onChange方法按预期调用。

这是我在kotlin中的ViewModel:

class CartItemViewModel : ViewModel() {

    val liveData: LiveData<List<CartItem>> = MainApplication.getInstance().cartItemDao.liveData

    companion object {
        @JvmStatic
        fun create(fragment: FragmentActivity): CartItemViewModel =
            ViewModelProviders.of(fragment).get(CartItemViewModel::class.java)
    }
}

这里的要点是CartItem正在加载,但是如何以正确的方式填充ItemService对象?

如果需要任何其他信息,请告诉我。 感谢。

编辑:创建使onChanged不再被调用的存储库。

class CartItemRepository {

    companion object {

        fun getLiveData(): LiveData<List<CartItem>> {
            val liveData = MutableLiveData<List<CartItem>>()

            doAsync {
                val cartItems = MainApplication.getInstance().cartItemDao.all
                for (cartItem in cartItems) {
                    val item = MainApplication.getInstance().itemDao.get(cartItem.itemId)
                    cartItem.item = item
                    val service = MainApplication.getInstance().serviceDao.get(cartItem.serviceId)
                    cartItem.service = service
                }
                liveData.value = cartItems
            }

            return liveData
        }  
    }
}

0 个答案:

没有答案
相关问题