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



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

发生了什么,一旦用户将 EditText 留空并点击"积极"按钮,在小吃栏中获取消息,但也关闭对话框。

那么我如何控制关闭警报对话框,如果条件失败,这是代码:

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

您可以按如下方式设置 onShowListener

View view = getLayoutInflater().inflate(R.layout.layout_dialog, null);
acceptUserInput = (EditText) mView.findViewById(R.id.acceptUserInput);
   final AlertDialog alertDialog = new AlertDialog.Builder(context)
            .setView(view)
            .setCancelable(false)
            .setPositiveButton("SAVE", null)
            .setNegativeButton("CLOSE", null)
            .create();
alertDialog.setOnShowListener(new DialogInterface.OnShowListener() {
        @Override
        public void onShow(DialogInterface dialog) {
            Button buttonPositive = ((AlertDialog) dialog).getButton(DialogInterface.BUTTON_POSITIVE);
            buttonPositive.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                 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;
                        }
            });
            Button buttonNegative = ((AlertDialog) dialog).getButton(DialogInterface.BUTTON_NEGATIVE);
            buttonNegative.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                     alertDialog.dismiss();
                }
            });
        }
    });
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();
根据您的

问题给出的工作解决方案如下:-

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);
    final EditText acceptUserInput = (EditText) mView.findViewById(R.id.acceptUserInput);
    alertDialogBuilderUserInput.setView(mView);
    alertDialogBuilderUserInput
            .setCancelable(false)
            .setPositiveButton("SAVE", null)
            .setNegativeButton("CLOSE",null);
    final AlertDialog alertDialogAndroid = alertDialogBuilderUserInput.create();
    alertDialogAndroid.show();
    alertDialogAndroid.getButton(AlertDialog.BUTTON_POSITIVE).setOnClickListener(new View.OnClickListener()
    {
        @Override
        public void onClick(View v)
        {
            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();
            }
        }
    });
    alertDialogAndroid.getButton(AlertDialog.BUTTON_NEGATIVE).setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
            alertDialogAndroid.cancel();
        }
    });
}

最新更新