【问题标题】:can't call dismiss() on a custom AlertDialog.Builder无法在自定义 AlertDialog.Builder 上调用 dismiss()
【发布时间】:2017-07-21 04:52:52
【问题描述】:

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

问题是我想在onClickmPositiveBTN 中将其关闭

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);
    }
}

【问题讨论】:

    标签: java android android-alertdialog dismiss


    【解决方案1】:

    构建器本身不是一个对话框,这意味着您不能完全在构建器上调用dismiss。

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

    【讨论】:

    • 我知道,但我仍然不知道如何终止它!
    【解决方案2】:

    我总是像这样使用 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();
    

    show 方法返回一个 AlertDialog.so 我可以通过以下方式将其关闭:

     dialog.dismiss();
    

    【讨论】:

      猜你喜欢
      • 2013-11-05
      • 2015-11-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-17
      • 1970-01-01
      • 2013-11-06
      相关资源
      最近更新 更多