【问题标题】:Return to Alert Dialog when Check if an Edit Text is empty检查编辑文本是否为空时返回警报对话框
【发布时间】:2018-09-01 16:57:57
【问题描述】:

我创建了带有三个 EditText 和一个按钮来发送值的 AlertDialog。如果 Edit Text 之一为空,它应该返回到 Alert Dialog。

我用这段代码来检查:

 if (TextUtils.isEmpty(edt_dialog_date.getText().toString())) {
       Toast.makeText(MainActivity.this, "Please enter Date", 
                 Toast.LENGTH_SHORT).show();
       return;
 }  

如果编辑文本为空,它会关闭 Alert 对话框并返回到 Parent Activity ,我想要的是返回到 AlertDialog 本身。 该怎么做?

这是我的来源:

final AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
 builder.setTitle("Add New Bill");

 LayoutInflater inflater = this.getLayoutInflater();
 View custom_dialog = inflater.inflate(R.layout.dialog_custom, null);

EditText edtNo = (EditText) custom_dialog .findViewById(R.id.edt_no);
EditText edtName = (EditText) custom_dialog .findViewById(R.id.edt_name);
EditText edtAge = (EditText) custom_dialog .findViewById(R.id.edt_age);

builder.setView(custom_dialog);

builder.setPositiveButton("Add", new DialogInterface.OnClickListener() {
 @Override
 public void onClick(DialogInterface dialog, int which) {
  if (TextUtils.isEmpty(edtNo.getText().toString())) {
       return;
  }
  if (TextUtils.isEmpty(edtName.getText().toString())) {
   return;
    }
  if(TextUtils.isEmpty(edtAge.getText().toString())) {
        return;
     }
    }
});

builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                dialog.dismiss();
            }
        });
builder.show();     

【问题讨论】:

  • 分享您的警报对话框来源
  • @Qasim 它只是一个简单的警报对话框构建器。最终 AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this); builder.setTitle("添加新账单");
  • 并且该按钮是使用 Builder 可用的正/负/中性之一,对吧?
  • @Qasim 按钮是正按钮 builder.setPositiveButton("Add", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { if (TextUtils.isEmpty(edtNo. getText().toString())) { return; }

标签: android android-alertdialog


【解决方案1】:

由于默认情况下,AlertDialog 按钮将dismiss() 对话框,因此为防止这种情况,您必须在对话框显示后立即覆盖按钮单击侦听器。你可以试试下面的sn-p。

dialog.setOnShowListener(new DialogInterface.OnShowListener() {

   @Override
    public void onShow(DialogInterface dialogInterface) {

        Button button = ((AlertDialog) dialog).getButton(AlertDialog.BUTTON_POSITIVE);
        button.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View view) {

            //Dismiss once everything is OK.
            dialog.dismiss();
        }
     });
    }
});
dialog.show();

【讨论】:

  • 没关系。我应该写这个而不是积极按钮的代码。
  • 是的,只需添加带有 null 作为侦听器的正按钮标题,然后像上面一样处理按钮 onclick
  • 我很困惑在哪里添加这段代码你能告诉我如何把它放在我的源代码中吗?我已经编辑了我的问题。
  • 我已经用源代码编辑了我的问题。请告诉我把你回答的代码放在哪里。
【解决方案2】:

要停止关闭对话框,直到您检查是否所有编辑文本都填充了正确的信息,您必须将肯定按钮代码留空并在否定按钮中关闭对话框。 之后你必须定义

警报对话框 = builder.create();

然后显示对话框并使用

dialog.getButton

到正按钮并设置 OnClickListener 像下面的代码:

final AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
LayoutInflater inflater = this.getLayoutInflater();
View custom_dialog = inflater.inflate(R.layout.dialog_custom, null);

EditText edtNo = (EditText) custom_dialog .findViewById(R.id.edt_no);
EditText edtName = (EditText) custom_dialog .findViewById(R.id.edt_name);
EditText edtAge = (EditText) custom_dialog .findViewById(R.id.edt_age);

builder.setPositiveButton("Add", new DialogInterface.OnClickListener() {
   @Override
   public void onClick(DialogInterface dialog, int which) {
         // leave it empty 
   }

});

builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener(){
     @Override
     public void onClick(DialogInterface dialog, int which) {
          dialog.dismiss();
    }
});

builder.setView(custom_dialog);
AlertDialog dialog = builder.create();
dialog.show();
 dialog.getButton(AlertDialog.BUTTON_POSITIVE).setOnClickListener(new View.OnClickListener() {
     @Override
     public void onClick(View v) {
            // write check code
  if (TextUtils.isEmpty(edtNo.getText().toString())) {
       return;
  }
  if (TextUtils.isEmpty(edtName.getText().toString())) {
      return;
  }
  if(TextUtils.isEmpty(edtAge.getText().toString())) {
     return;
 }

// if every thing is Ok then dismiss dialog
            dialog.dismiss();
   }

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多