我们可以通过添加带有实现的正面按钮来执行验证
final EditText urlEditText = new EditText(this);
DialogInterface.OnClickListener event = new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
try
{
// Validate URL
new URL(urlEditText.getText().toString());
Toast.makeText(getBaseContext(), "URL Accepted", 1).show();
}
catch (MalformedURLException e) {
Toast.makeText(getBaseContext(), "Invalid URL", 1).show();
}
}
};
AlertDialog dialog = new AlertDialog.Builder(this)
.setTitle("Enter the server URL here")
.setNegativeButton("Cancel", null)
.setPositiveButton("Ok",event)
.setView(urlEditText)
.create();
dialog.show();
如果我们输入了错误的网址,系统会对其进行验证并显示错误的网址Toast
。但是,对话框被取消,它应该仍然显示,直到用户按“取消”或输入正确的URL。这里有解决方案,比如重新创建对话框并再次将其显示给用户,但这是一个好主意。
有没有办法让我们输入错误的网址AlertDialog
仍在那里?
答案 0 :(得分:9)
我们可以使用AlertDialog.getButton()
,因此我们可以获得AlertDialog
的按钮引用。如果向用户显示对话框,则应调用此方法。
final EditText urlEditText = new EditText(this);
final AlertDialog dialog = new AlertDialog.Builder(this)
.setTitle("Enter the server URL here")
.setNegativeButton("Cancel", null)
.setPositiveButton("Ok",null)
.setView(urlEditText)
.create();
dialog.setOnShowListener(new OnShowListener() {
@Override
public void onShow(DialogInterface arg0) {
Button okButton = dialog.getButton(AlertDialog.BUTTON_POSITIVE);
okButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View arg0) {
try
{
new URL(urlEditText.getText().toString());
Toast.makeText(getBaseContext(), "URL Accepted", 1).show();
dialog.dismiss();
}
catch (MalformedURLException e) {
Toast.makeText(getBaseContext(), "Invalid URL", 1).show();
}
}
});
}
});
更新1:我们可以使用AlertDialog.BUTTON1
,但现已弃用。
答案 1 :(得分:1)
URLUtil
提供了有用的方法,例如
isHttpUrl();
isValidUrl();
尝试使用其中一个来验证您在EditText
中输入的网址。如果URL
无效,请再次显示提醒或不dismiss
对话。