我有一个对话框,每当进行一些后台进程时,它就会显示并显示一个正在加载的ProgressBar。但是,由于dismiss()
功能不起作用,因此无法将其关闭。在下面的hideLoading()
函数中,我的代码应该关闭对话框,但.dismiss()
不起作用。请协助。
MainActivity.Java
public class LoginActivity extends AppCompatActivity {
MaterialAlertDialogBuilder progress;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
progress = new MaterialAlertDialogBuilder(LoginActivity.this);
login.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (password_text.getText().length() < 5) {
password_layout.setError(getResources().getString(R.string.valid_short_password));
} else {
showLoading();
}
}
});
}
private void showLoading() {
progress.setView(R.layout.loading);
progress.setCancelable(false);
progress.show();
}
private void hideLoading() {
progress.dismiss();
}
}
您的progress
对象是MaterialAlertDialogBuilder
,而不是AlertDialog
本身。您不能在构建器上调用解雇。首先通过AlertDialog
从构建器获取progress.create()
对象,然后显示它。之后,您也可以将其关闭。例如:
public class LoginActivity extends AppCompatActivity {
MaterialAlertDialogBuilder progress;
AlertDialog progressDialog;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
progress = new MaterialAlertDialogBuilder(LoginActivity.this);
login.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (password_text.getText().length() < 5) {
password_layout.setError(getResources().getString(R.string.valid_short_password));
} else {
showLoading();
}
}
});
}
private void showLoading() {
progress.setView(R.layout.loading);
progress.setCancelable(false);
progressDialog = progress.create();
progressDialog.show();
}
private void hideLoading() {
progressDialog.dismiss();
}
}
注意:我不确定cancelable
属性在警报对话框中的工作方式,但您也可以允许将其取消以将其关闭。如果以上代码不起作用,请尝试添加progress.setCancelable(true)
。