簡體   English   中英

更新數據 Android MVVM

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM