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

时间:2018-01-13 12:00:21

标签: android viewmodel progressdialog

onChanged我正在更新用户界面并取消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();  }

但每次onChanged都没有被攻击而且progressdialog不会停止!!

3 个答案:

答案 0 :(得分:1)

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

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

在您的viewModel中添加getIsLoading方法:

public LiveData<Boolean> getIsLoading(){
    LiveData<Boolean> isLoading=yourRepository.getIsLoading();
    return isLoading;
}

然后在您的存储库中添加:

private final MutableLiveData<Boolean> isLoading=new MutableLiveData<>();

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

希望对您有帮助。

答案 1 :(得分:0)

onChanged()没有被调用是完全正常的,这意味着数据没有更多变化。

我想你想要在获取或加载数据时显示 ProgressDialog 。你可以做这样的事情

onCreate()显示之前是否存在检查数据,在下面的伪代码中显示 ProgressDialog

if (!hasData())
   displayProgressDialog()

修改: 看来你想通过显示ProgressDialog来告知用户数​​据已经改变了,你可以通过显示这一点来实现这一点,并在一段时间之后将其解雇,onChanged()

中有这样的事情
    @Override
    public void onChanged(@Nullable BillGetResponse billGetResponse) {
        if (btnRecordDisableEnabled != null)
            btnRecordDisableEnabled.enable();

        displayProgressDialog(); //Show progress dialog here
        new Handler().postDelayed(new Runnable(){
            @Override
            public void run() {
                pd.dismiss();   
            }
        },500);
    }

答案 2 :(得分:-1)

旋转屏幕将重新创建您的活动。停止重新创建它 使用

android:configChanges="keyboardHidden|orientation" 

在您的活动的清单文件中

<activity android:name="MainActivity"
     android:configChanges="keyboardHidden|orientation">