如果用户未提供全部信息,如何保持警报对话框打开



我创建了一个自定义对话框,用户将在其中提供用户所需的四个信息,但是如果用户单击警报对话框的任何按钮而没有提供完整信息,则该对话框关闭,我希望该警报不会关闭,除非用户提供完整信息这是自定义警报对话框
在此处输入图像描述

this is java code for custom alert dialog

                final ExtraFunction ef = new ExtraFunction(mContext);
                final String PhoneNumber = holder.bdContactNumber.getText().toString();
                LayoutInflater layoutInflater = LayoutInflater.from(mContext);
                View promptsView = layoutInflater.inflate(R.layout.dialog_contact_for_blood, null);
                final AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(mContext);
                alertDialogBuilder.setView(promptsView);
                final EditText etSubject = (EditText) promptsView.findViewById(R.id.etSubject);
                etSubject.setText(holder.bdBloodgroup.getText().toString());
                final EditText etNumber_Bottles = (EditText) promptsView.findViewById(R.id.etNumber_Bottles);
                final EditText etRequired_At = (EditText) promptsView.findViewById(R.id.etRequired_At);
                final EditText etContact_number = (EditText) promptsView.findViewById(R.id.etContact_number);
                alertDialogBuilder.setCancelable(false).setPositiveButton(R.string.send_message, new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialogInterface, int i) {
                        // get user input and set it to result
                        // edit text
                        String Subject = etSubject.getText().toString();
                        String Number_Bottles = etNumber_Bottles.getText().toString();
                        String Required_At = etRequired_At.getText().toString();
                        String Contact_number = etContact_number.getText().toString();
                        String blood_message = ""+Subject+" Blood  "+Number_Bottles+" in Quantity is urgently required at "+Required_At+". Kindly contact at "+Contact_number+". Thanks.n" + "("+R.string.app_name+")";
                       if(etNumber_Bottles.length()==0 && etRequired_At.length()==0 && etContact_number.length()==0)
                       {
                           Toast.makeText(mContext, "Please Enter All Values....", Toast.LENGTH_SHORT).show();
                           return;
                       }
                       else
                       {
                           try {
                               SmsManager smsManager = SmsManager.getDefault();
                               smsManager.sendTextMessage(PhoneNumber, null, blood_message, null, null);
                               Toast.makeText(mContext, R.string.success_message, Toast.LENGTH_SHORT).show();
                           } catch (Exception e) {
                               Toast.makeText(mContext, R.string.failed_message + PhoneNumber, Toast.LENGTH_SHORT).show();
                               e.printStackTrace();
                           }
                       }

                        // ef.SendSmsFunction(PhoneNumber,blood_message);
                    }
                }).setNegativeButton(R.string.Cancel, new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialogInterface, int i) {
                        dialogInterface.cancel();
                    }
                });
                AlertDialog alertDialog = alertDialogBuilder.create();
                alertDialog.show();

搜索但不清楚我的问题

你做了一些错误的验证

 if(etNumber_Bottles.length()==0 && etRequired_At.length()==0 && etContact_number.length()==0)
                       {
                           Toast.makeText(mContext, "Please Enter All Values....", Toast.LENGTH_SHORT).show();
                           return;
                       }

由于此验证仅在所有字段为空而不是&&运算符时才有效,因此您应该使用OR运算符并获取editText的字符串值,不要直接在编辑文本上使用长度值,首先键入转换为字符串而不是获取长度。您可以为此采用使用长度方法或等于方法,如下所示。

你可以使用它。

if(etNumber_Bottles.getText().toString().tolength()==0 || etRequired_At.getText().toString().length()==0 || etContact_number.getText().toString().length()==0)
                       {
                           Toast.makeText(mContext, "Please Enter All Values....", Toast.LENGTH_SHORT).show();
                           return;
                       }

或通过相等方法:

if(etNumber_Bottles.getText().toString().equals("") || etRequired_At.getText().toString().equals("") || etContact_number.getText().toString().equals(""))
                       {
                           Toast.makeText(mContext, "Please Enter All Values....", Toast.LENGTH_SHORT).show();
                           return;
                       }

setOnShowListener可能会解决您的问题:

    AlertDialog dialog = new AlertDialog.Builder(getActivity())
            .setTitle("Title")
            .setMessage("Messsage")
            .setPositiveButton(android.R.string.ok, null)
            .create();
    dialog.setOnShowListener(new DialogInterface.OnShowListener() { 
        @Override
        public void onShow(final DialogInterface dialog) {
            Button buttonOk = ((AlertDialog) dialog).getButton(AlertDialog.BUTTON_POSITIVE);
            if (buttonOk != null) {
                buttonOk.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View view) {
                        //Write what you want to do on button click
                    }
                });
            }
        }
    });

由此提供。

顺便说一下,看看EditText#setError而不是你的Toast.makeText.看起来更漂亮了!

附言我已经改变了我的答案。您必须创建 AlertDialog 并定义setOnShowListener并且您的对话框不会在单击按钮时关闭。这是你想要的吗?

兄弟,

您需要学习如何验证视图,看看此示例 -https://stacktips.com/tutorials/android/edittext-validation-in-android-example以及 https://www.excella.com/insights/how-do-i-validate-an-android-form 和 https://stackoverflow.com/a/33072633/4741746

有一些库提供了简单的验证方法,您可以更喜欢 https://github.com/ragunathjawahar/android-saripaar

祝你好运

最新更新