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不会停止!!
答案 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">