[英]Updating data Android MVVM
我正在使用架構 MVVM 的應用程序中工作,當您需要更新或插入來自事件(例如單擊按鈕時)的數據時,我對它的最佳方式感到有些困惑。
我在訂閱觀察者中有這個來跟蹤變化,當我在添加產品並訂購后打開片段時,這很好用:
shopViewModel.getOrderWithProducts().observe(getViewLifecycleOwner(), new Observer<Resource<OrderWithProducts>>() {
@Override
public void onChanged(Resource<OrderWithProducts> pedidoResource) {
if (pedidoResource != null) {
Log.d(TAG, "onChanged: status: " + pedidoResource.status);
switch (pedidoResource.status) {
case LOADING: {
adapterPedido.displayLoading();
break;
}
case ERROR: {
adapterPedido.hideLoading();
if(pedidoResource.data != null) adapterPedido.setList(pedidoResource.data);
break;
}
case SUCCESS: {
if (pedidoResource.data != null) {
adapterPedido.hideLoading();
adapterPedido.setList(pedidoResource.data);
break;
}
}
}
}
});
}
並更新訂單我這樣做:
public void updateOrder() {
pedidoRepository.setOrderConfirm(OrderWithProducts.getValue().data.getPedido().getId());
pedidoConProductos.getValue().data.getPedido().setConfirmado(true);
}
但我認為它必須是一個更好的方法,因為 Fragment 不會自動更新 Fragment 中的數據。 更新后,適配器應該改變。
嘗試
shopViewModel.getOrderWithProducts().observe(getViewLifecycleOwner(), new Observer<List<OrderWithProducts>>() {
@Override
public void onChanged(List<OrderWithProducts> data) {
adapterPedido.setList(data);
}
});
shopViewModel.isLoading().observe(getViewLifecycleOwner(), new Observer<Boolean>() {
@Override
public void onChanged(Boolean isLoading) {
if(isLoading) {
adapterPedido.displayLoading();
} else {
adapterPedido.hideLoading();
}
}
});
和
public void updateOrder() {
pedidoRepository.setOrderConfirm(OrderWithProducts.getValue().data.getPedido().getId());
// pedidoConProductos.getValue().data.getPedido().setConfirmado(true);
}
如果getOrderWithProducts()
提供的原始 LiveData 作為LiveData<List<T>>
來自 Room DAO,那么它將相應地自動更新。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.