2011-02-28 94 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(“你的错误信息”时可以设置))文本。