2013-02-12 38 views
2

我们可以通过添加一个积极的按钮,实现安卓:警告对话框验证有道

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。这里有解决方案,像重新创建对话框并再次显示给用户,但这是一个好主意。

有没有办法,如果我们输入一个错误的URL AlertDialog仍然存在?

回答

8

我们可以使用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,但它现在已经过时。

+0

不错的工作..上帝保佑 – reegan29 2015-06-10 14:25:28

1

URLUtil提供了有用的方法,如

isHttpUrl(); 
isValidUrl(); 

尝试使用其中一个来验证EditText中输入您的网址。并且如果URL无效,请再次显示警报或不要求dismiss对话框。