无法在自定义 AlertDialog.Builder 上调用 dismiss()

can't call dismiss() on a custom AlertDialog.Builder

我创建了这个自定义AlertDialog.Builder

问题是我想在 mPositiveBTN

onClick 中关闭它

dismiss()cancel() 未定义!怎么做?

就是这样:

public class SendSmsDialog extends AlertDialog.Builder {

    private TextView mMessageTV;
    private Button mPositiveBTN;

    private EditText mobileNumberET;

    private Context mContext;

    public SendSmsDialog(@NonNull Context context, String title, String message) {
        super(context);
        mContext = context;

        LayoutInflater inflater = ((MainActivity)context).getLayoutInflater();
        View dialoglayout = inflater.inflate(R.layout.send_sms_dialog, null);
        this.setView(dialoglayout);

        bindViews(dialoglayout);
        setListeners();


        this.setTitle(title);
        mMessageTV.setText(message);
    }

    private void setListeners() {
        mPositiveBTN.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                mobileNumberET.setEnabled(true);
                mobileNumberET.requestFocus();

                if (UtilitiesMethods.checkEnteredPhone(mobileNumberET.getText().toString())) {
                    ((MainActivity)mContext).doSendSMS(mobileNumberET.getText().toString());
                } else {
                    SendSmsDialog.this.dismiss(); //not defined
                    mobileNumberET.setError("Please enter a correct mobile number");
                }
            }
        });
    }

    private void bindViews(View dialoglayout) {
        mMessageTV = (TextView) dialoglayout.findViewById(R.id.msg_tv);
        mPositiveBTN = (Button) dialoglayout.findViewById(R.id.proceed_btn);
        mobileNumberET = (EditText) dialoglayout.findViewById(R.id.mobile_num);
    }
}

构建器本身不是对话框,这意味着您不能对构建器调用 dismiss。

您可能应该扩展 AlertDialog 而不是 AlertDialog.Builder。

我总是这样使用 AlertDialog.Builder:

private AlertDialog.Builder builder;
private AlertDialog dialog;
.
.
.
.
    builder = new AlertDialog.Builder(this);
    builder.setTitle("Add your account");
    builder.setView(rootView);

为了显示我使用的对话框:

dialog = builder.show();

显示方法 return a AlertDialog.so 我可以通过以下方式关闭它:

 dialog.dismiss();