1

每当一些后台进程正在进行时,我都会出现一个对话框,并显示一个正在加载的 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();
}
}
4

2 回答 2

2

你的progress对象是一个MaterialAlertDialogBuilder,而不是一个AlertDialog本身。您不能在构建器上调用驳回。首先AlertDialog通过 builder 从 builder 获取一个对象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).

于 2020-06-09T19:15:48.013 回答
2

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

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

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

dialog.dismiss();
于 2020-06-09T20:06:17.863 回答