【问题标题】:alertdialog edittext validationalertdialog 编辑文本验证
【发布时间】:2018-05-24 09:19:26
【问题描述】:

我有一个添加了编辑文本的警报对话框。它有正面和负面的按钮。每当我单击肯定/确定按钮时,即使编辑文本为空,对话框也会退出。

我想控制这种行为。即;我希望仅当编辑文本不为空时才退出警报对话框。

注意:strAuthorDesc 是一个字符串变量。

这是单击按钮时执行的代码。

                AlertDialog.Builder builder = new AlertDialog.Builder(mActivity);
                builder.setTitle("Author Desc.");
                final EditText descInput = new EditText(mActivity);
                descInput.setInputType(InputType.TYPE_CLASS_TEXT);
                descInput.setTextColor(ContextCompat.getColor(mActivity, R.color.black));
                descInput.setLines(5);
//                    descInput.setMaxLines(5);
                descInput.setGravity(Gravity.LEFT | Gravity.TOP);
                descInput.setSingleLine(false);
                descInput.setHorizontalScrollBarEnabled(false);
                builder.setView(descInput);

                builder.setPositiveButton("SAVE", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        strAuthorDesc = descInput.getText().toString();
                        if(strAuthorDesc != null && !strAuthorDesc.equals("")){
                            dialog.dismiss();
                            Const.showToast("Description added", mActivity);
                            setAuthorDesc();
                        }else{
                            Const.showToast("Desc. cannot be empty!", mActivity);
                        }
                    }
                });
                builder.setNegativeButton("CANCEL", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        dialog.cancel();

                    }
                });

            alertDialog = builder.create();
            alertDialog.setCancelable(false);
            alertDialog.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE);
            alertDialog.show();

【问题讨论】:

    标签: android android-alertdialog


    【解决方案1】:

    检查editext是否为空

    查看以下代码以供参考

    EditText usernameEditText = (EditText) findViewById(R.id.editUsername);
    sUsername = usernameEditText.getText().toString();
    if (sUsername.matches("")) {
        Toast.makeText(this, "You did not enter a username", Toast.LENGTH_SHORT).show();
        return;
    }
    

    从您的代码中检查下面的更新代码,它将为您工作

                        AlertDialog.Builder builder = new AlertDialog.Builder(mActivity);
                        builder.setTitle("Author Desc.");
                        final EditText descInput = new EditText(mActivity);
                        descInput.setInputType(InputType.TYPE_CLASS_TEXT);
                        descInput.setTextColor(ContextCompat.getColor(mActivity, R.color.black));
                        descInput.setLines(5);
        //                    descInput.setMaxLines(5);
                        descInput.setGravity(Gravity.LEFT | Gravity.TOP);
                        descInput.setSingleLine(false);
                        descInput.setHorizontalScrollBarEnabled(false);
                        builder.setView(descInput);
    
                        builder.setPositiveButton("SAVE", new DialogInterface.OnClickListener() {
                            @Override
                            public void onClick(DialogInterface dialog, int which) {
                                strAuthorDesc = scInput.getText().toString();
                               if (strAuthorDesc.matches("")) {
                               dialog.dismiss();
                               Const.showToast("Description added",mActivity);
                               setAuthorDesc();
                               }else{
                                  Const.showToast("Desc. cannot be empty!",mActivity);
                }
                            }
                        });
                        builder.setNegativeButton("CANCEL", new DialogInterface.OnClickListener() {
                            @Override
                            public void onClick(DialogInterface dialog, int which) {
                                dialog.cancel();
    
                            }
                        });
    
                    alertDialog = builder.create();
                    alertDialog.setCancelable(false);
                    alertDialog.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE);
                    alertDialog.show();
    

    【讨论】:

    • 你做了哪些改变?
    • if (strAuthorDesc.matches("")) { dialog.dismiss(); Const.showToast("添加说明",mActivity); setAuthorDesc(); }else{ Const.showToast("Desc.不能为空!",mActivity); }
    【解决方案2】:

    我想我已经明白了。现在发生的情况是默认状态是在按下正面或负面按钮时关闭关闭对话框,因此我们需要覆盖正面按钮,然后在那里进行验证。这是下面的代码。

          AlertDialog.Builder builder = new AlertDialog.Builder(this);
            builder.setTitle("Author Desc.");
            final EditText descInput = new EditText(this);
            descInput.setInputType(InputType.TYPE_CLASS_TEXT);
            descInput.setTextColor(ContextCompat.getColor(this, android.R.color.black));
            descInput.setLines(5);
    //                    descInput.setMaxLines(5);
            descInput.setGravity(Gravity.LEFT | Gravity.TOP);
            descInput.setSingleLine(false);
            descInput.setHorizontalScrollBarEnabled(false);
            builder.setView(descInput);
    
            builder.setPositiveButton("SAVE", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
    
                }
            });
            builder.setNegativeButton("CANCEL", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    dialog.cancel();
    
                }
            });
    
            alertDialog = builder.create();
            alertDialog.setCancelable(false);
            alertDialog.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE);
            alertDialog.show();
    
            alertDialog.getButton(AlertDialog.BUTTON_POSITIVE).setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    descInput.getText().toString();
                    if(descInput.getText().toString().equals("")){
                        Log.d("Test","Is empty");
    
    
                    }else{
                        Log.d("Test","Is Not Empty "+descInput.getText().toString());
                        alertDialog.dismiss();
                    }
                }
            });
    

    我希望这会有所帮助!

    我在这个链接How to prevent a dialog from closing when a button is clicked找到了与对话框相关的问题ans

    【讨论】:

    • 它有帮助吗?
    • 很遗憾没有
    【解决方案3】:

    builder.setCancelable(false); 放在您对alertDialog 构建器的定义下方。

    然后是你的积极/消极按钮

                        builder.setPositiveButton("SAVE", new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                            strAuthorDesc = descInput.getText().toString();
                            if(strAuthorDesc != null && !strAuthorDesc.equals("")){
    

    关闭Dialog后,不要调用任何方法,调用dismiss() 最后一个

                                    dialog.dismiss();
                                    Const.showToast("Description added", mActivity);
                                    setAuthorDesc();
                                }else{
                                    Const.showToast("Desc. cannot be empty!", mActivity);
                                }
                            }
                        });
                        builder.setNegativeButton("CANCEL", new DialogInterface.OnClickListener() {
                            @Override
                            public void onClick(DialogInterface dialog, int which) {
                                dialog.cancel();
    
                            }
                        });
    

    【讨论】:

    • 试过了。没用。一旦我单击肯定按钮,即使 strAuthorDesc 为空,对话框也会消失。
    【解决方案4】:

    我使用 Dialog 类而不是 AlertDialog/Builder 或扩展 DialogFragment 或 Dialog 类解决了这个问题。

    这是代码。

    private void showDescDialog(boolean isEditingDesc, String textToEdit){
        final Dialog dialog = new Dialog(mActivity);
        dialog.setContentView(R.layout.custom_dialog_author_desc);
        dialog.setTitle("");
    
        TextView tvHeading = (TextView) dialog.findViewById(R.id.tv_heading);
        final EditText descInput = (EditText) dialog.findViewById(R.id.et_author_desc);
        Button btnSave = (Button) dialog.findViewById(R.id.btn_save);
        Button btnCancel = (Button) dialog.findViewById(R.id.btn_cancel);
    
        if(isEditingDesc){
            descInput.setText(textToEdit);
            tvHeading.setText("Edit author description");
        }else{
            tvHeading.setText("Add author description");
        }
    
        btnSave.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                strAuthorDesc = descInput.getText().toString();
                if(!TextUtils.isEmpty(strAuthorDesc)){
                    Const.showToast("Description added", mActivity);
                    setAuthorDesc();
                    dialog.dismiss();
                }else{
                    Const.showToast("Desc. cannot be empty!", mActivity);
                }
            }
        });
    
        btnCancel.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                dialog.cancel();
            }
        });
    
        dialog.setCancelable(false);
        dialog.show();
    }
    

    【讨论】:

      猜你喜欢
      • 2010-11-12
      • 1970-01-01
      • 2023-02-17
      • 2011-12-07
      • 2015-05-29
      • 1970-01-01
      • 1970-01-01
      • 2011-03-10
      • 2011-12-03
      相关资源
      最近更新 更多