2013-04-22 26 views
0

我想知道什麼是驗證形式的最佳方式?表單驗證的Android

我曾嘗試以下操作:

EditText fname = (EditText)findViewById(R.id.first_name); 
String fname_text = fname.getText().toString; 
if(fname_text.equalsIgnoreCase("")) 
     { 
      fname.setError("Field is required"); 
     } 

也:

fname.addTextChangedListener(new TextWatcher() 
     {   
      @Override 
      public void onTextChanged(CharSequence s, int start, int before, int count){ 

      }   
      @Override 
      public void beforeTextChanged(CharSequence s, int start, int count, 
        int after){ 

      }   
      @Override 
      public void afterTextChanged(Editable s) 
      { 

       Pattern mPattern = Pattern.compile("[A-Za-z]{2,20}$"); 

       Matcher matcher = mPattern.matcher(s.toString());    
       if(!matcher.matches())  // on Success 
       { 
        fname.setError("Please make sure you input a valid first name"); 

       } 
       } 
     }); 

我在很困惑的事情是,...每當加載頁面的第一次,誤差顯示的消息,但是當我去的EditText內部,然後輸入一些內容,如果我刪除的內容,該錯誤信息不會保留。那麼如何保持這種驗證持久性?因爲程序正在形成的方式,它看起來不會很好地驗證任何東西。和你們知道一些正則表達式在android中的完整示例的好的鏈接,請做推薦。

而且也,我怎麼會投入onTextChanged的Pattern和Matcher方法或beforeTextChanged影響輸出?

回答

1

,而不是運行檢查的

之後
EditText fname = (EditText)findViewById(R.id.first_name); 
String fname_text = fname.getText().toString; 

使用一個OnFocusChangeListener並運行它只要onFocusChange()方法被調用。理想情況下,只有當視圖失去焦點時纔會運行它。例如:

EditText fname = (EditText)findViewById(R.id.first_name); 
String fname_text = fname.getText().toString; 
fname.setOnFocusChangeListener(new OnFocusChangeListener() { 
    @Override 
    public void onFocusChange(View arg0, boolean arg1) { 
     if(!(v.isFocused())) { 
      //Run your validation 
     } 
    } 
}); 

這樣,您只在用戶輸入完成時運行驗證,而不是每次用戶更改某些內容時都運行驗證。

+0

謝謝...幫了很多人。 – 2013-04-22 14:40:39