如何以编程方式关闭Android Material Alert对话框?

时间:2020-06-09 19:04:01

标签: android android-alertdialog material-dialog

我有一个对话框,每当正在进行某些后台进程时,该对话框就会出现,并显示正在加载的ProgressBar。但是,由于hideLoading()函数不起作用,因此无法将其关闭。在下面的代码中,.dismiss()函数应该关闭对话框,但是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(); } } 不起作用。请协助。

MainActivity.Java

{{1}}

2 个答案:

答案 0 :(得分:1)

在您的代码中,“ progress”不是对话框实例,而是MaterialDialogBu​​ider实例。您应该通过类似这样的方式获取AlertDialog的实例。

MaterialAlertDialogBuilder builer = new MaterialAlertDialogBuilder(MainActivity.this);
builer.setView(R.layout.loading);
builer.setCancelable(false);
AlertDialog dialog = builder.show();

要关闭对话框,您可以像这样调用dismiss函数。

dialog.dismiss();

答案 1 :(得分:0)

您的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)