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