3

我们可以通过添加一个带有实现的肯定按钮来执行验证

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

如果我们输入了错误的 URL,它将被验证并显示错误的 URL Toast。但是,对话框被关闭,它应该仍然显示,直到用户按下“取消”或输入正确的 URL。这里有一些解决方案,例如重新创建对话框并将其再次显示给用户,但这是一个好主意。

有没有办法如果我们输入错误的 URLAlertDialog仍然存在?

4

2 回答 2

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,但现在已弃用。

于 2013-02-12T07:03:13.420 回答
1

URLUtil提供有用的方法,例如

isHttpUrl();
isValidUrl();

尝试使用其中之一来验证您输入的 URL EditText。如果URL无效,请再显示一次警报或不dismiss对话。

于 2013-02-12T07:01:56.583 回答