0

フォーカスが失われたときに電子メールやその他のものを検証するカスタム EditText を作成しています。有効でない場合はフォーカスを戻します。EditTextが1つしかない場合は正常に機能しますが、複数のEditTextがある場合、両方の検証をチェックしようとするため、editTextボックス間に無限に焦点が当てられます。これが私のサンプルコードです。

public void init(){

   this.setOnFocusChangeListener(new OnFocusChangeListener() {

    @Override
    public void onFocusChange(View v, boolean hasFocus) {
    // TODO Auto-generated method stub
    final MyEditText ed = MyEditText.this;

    //...............check require field validation
    if(!hasFocus && isRequire){
      if(ed.getText().toString().length()<=0){
           String msg = "Require Field";
            v.clearFocus();
        setErrorMsg(ed,msg);

        return;
                            }
    }else if(ed.getText().toString().length()>0){
        ed.setError(null);
    }
    }
}

private void setErrorMsg(final EditText ed,String msg){

  if(errorMessage!=null && errorMessage.length()>0){
    msg = errorMessage;
   }

  ed.setError(msg); 

  ed.post(new Runnable() {
    public void run() {
       ed.requestFocus();

    }
 });
}
4

2 に答える 2

1
boolean pendingFocus = false;

ed.post(new Runnable() {
    public void run() {
       ed.requestFocus();

    }
});

追加

pendingFocus = true;

および置換:

if(!hasFocus && isRequire){

if(!hasFocus && isRequire && !pendingFocus){

最後に、次の新しい else ステートメントで pendingFocus をリセットします。

  if(ed.getText().toString().length()<=0){
       String msg = "Require Field";
        v.clearFocus();
    setErrorMsg(ed,msg);

    return;
                        }
}else if(ed.getText().toString().length()>0){
    ed.setError(null);
}else{
    pedingFocus = false;
}
于 2013-10-07T12:37:39.923 に答える