2011-02-28 33 views
2

我有一個帶有3個EditText字段的簡單Activity。Android EditText在驗證後更改焦點並在對話框中顯示錯誤

用戶,通行證,確認

在用戶字段中鍵入的東西和人點擊旁邊的鍵盤上後,我對那裏setOnFocusChangeListener將驗證輸入。如果驗證失敗,則會打開一個消息和一個確定按鈕。

在關閉對話框之後,我嘗試在許多變體中的用戶EditText上嘗試requestFocus,通過在Pass上釋放它,試圖通過請求而不是清除並再次請求來再次釋放,但是當我單擊另一個字段時軟鍵盤將不會再次打開,或者最終會出現兩個帶有閃爍光標的EditText字段。

任何想法?

回答

2

我建議驗證用戶的輸入有TextWatcher:

EditText textbox = new EditText(context); 
textbox.addTextChangedListener(new TextWatcher() { 
      @Override 
      public void afterTextChanged(Editable s) { 
       // Your validation code goes here 
      } 

      @Override 
      public void onTextChanged(CharSequence s, int start, int before, int count) { 
      } 

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

只處理驗證在afterTextChanged方法,不要接觸其他兩個,如documentation建議。然而,afterTextChanged被觸發後,每當輸入改變,所以如果用戶輸入單詞「hello」,這個方法在輸入h時被調用,然後當輸入e時再次調用等等。此外,如果修改edittext值在afterTextChanged中,方法get也被調用。

另一種方法是在EditText失去焦點時驗證用戶輸入。爲了這個目的,你可以使用:

textbox.setOnFocusChangeListener(new OnFocusChangeListener() { 

     @Override 
     public void onFocusChange(View v, boolean hasFocus) { 
      // Your validation code goes here 
     } 
    }); 

但是要小心,有些部件可能不會搶焦點,所以你EDITTEXT從來沒有失去它(有與按鈕實例)。

此外,EditText上提供setError方法,這標誌着一個紅色的錯誤標記的EditText並顯示傳遞給SETERROR給用戶(該文本可以通過你的呼喚SETERROR(「你的錯誤信息」時可以設置))文本。

相關問題