如果EditText为空,请不要关闭警报对话框 - Android AlertDialog.Builder

时间:2017-05-12 04:58:00

标签: android alertdialog

我正在使用AlertDialog构建器从用户那里获取一些输入,我在其中编写了一个小的验证,如:如果EditText为空,则显示SnackBar并且不关闭对话框。

当用户离开EditText并点击“正面”按钮,在Snackbar中收到消息但关闭对话框时,会发生什么事。

那么如何控制关闭AlertDialog,如果条件失败,这里是代码:

public void inputDialog() {

        LayoutInflater layoutInflaterAndroid = LayoutInflater.from(context);
        final View mView = layoutInflaterAndroid.inflate(R.layout.layout_dialog, null);
        final AlertDialog.Builder alertDialogBuilderUserInput = new AlertDialog.Builder(context);

        acceptUserInput = (EditText) mView.findViewById(R.id.acceptUserInput);

        alertDialogBuilderUserInput.setView(mView);

        alertDialogBuilderUserInput
                .setCancelable(false)
                .setPositiveButton("SAVE", new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialogBox, int id) {
                        // ToDo get user input here

                        String strUserInput = acceptUserInput.getText().toString().trim();
                        if(TextUtils.isEmpty(strUserInput)) {

                            Snackbar snackbar = Snackbar.make(mView, "Name field cannot be left blank", Snackbar.LENGTH_LONG);
                            snackbar.show();

                            return;

                        }
                    }
                })

                .setNegativeButton("CLOSE",
                        new DialogInterface.OnClickListener() {
                            public void onClick(DialogInterface dialogBox, int id) {
                                dialogBox.cancel();
                            }
                        });

        AlertDialog alertDialogAndroid = alertDialogBuilderUserInput.create();
        alertDialogAndroid.show();

        }

3 个答案:

答案 0 :(得分:0)

您可以按如下方式设置onShowListener:

{{1}}

答案 1 :(得分:0)

AlertDialog.Builder mDialog = new AlertDialog.Builder(
            MapActivity.this);    

 AlertDialog mAlertDialog = mDialog.create();
            mAlertDialog.setOnShowListener(new DialogInterface.OnShowListener() {

                @Override
                public void onShow(DialogInterface dialog) {

                    Button b = mAlertDialog.getButton(AlertDialog.BUTTON_POSITIVE);
                    b.setOnClickListener(new View.OnClickListener() {

                        @Override
                        public void onClick(View view) {
                            // TODO Do something

                           mEdt.setText("message"); 
                        }
                    });
                }
            });
            mAlertDialog.show();

答案 2 :(得分:0)

根据您的问题,工作解决方案如下: -

Team