如何在屏幕旋转上使用 ProgressBar 处理 Android LiveData(ViewModel)?

San*_*Sur 2 android progressdialog viewmodel

onChanged我正在更新 UI 并取消 ,progressDialog但每次我旋转屏幕时都会显示进度对话框并且ProgressDialog 不会关闭

如果数据没有改变,如何处理progressdialog?

 final ProgressDialog pd;
    pd=new ProgressDialog(mContext);
    pd.setMessage(mContext.getString(R.string.updating));
    pd.show();MutableLiveData<BillGetResponse> DisplayByIdLiveData=viewModelForBillDisplay.getBillGetResponseDisplayById(txnRequest);

    if (display_by_id) {


        DisplayByIdLiveData.observe(BillDisplayFragment.this, new Observer<BillGetResponse>() {


            @Override
            public void onChanged(@Nullable BillGetResponse billGetResponse) {


                if (btnRecordDisableEnabled != null)
                    btnRecordDisableEnabled.enable();

                pd.dismiss();  }
Run Code Online (Sandbox Code Playgroud)

但是每次onChanged都没有触发并且进度对话框不会停止!

fva*_*via 10

您需要其他观察者来处理指示是否必须显示 ProgressDialog 的布尔值。这是代码:

viewModel.getIsLoading().observe(this, new Observer<Boolean>() {
        @Override
        public void onChanged(@Nullable Boolean aBoolean) {
            if(aBoolean){
                pd.show();
            }else{
                pd.dismiss();
            }
        }
    });
Run Code Online (Sandbox Code Playgroud)

在您的 viewModel 添加 getIsLoading 方法:

public LiveData<Boolean> getIsLoading(){
    LiveData<Boolean> isLoading=yourRepository.getIsLoading();
    return isLoading;
}
Run Code Online (Sandbox Code Playgroud)

并在您的存储库中添加:

private final MutableLiveData<Boolean> isLoading=new MutableLiveData<>();
Run Code Online (Sandbox Code Playgroud)

并在开始和完成数据上传时将值设置为 isLoading。

我希望它能帮助你。