2013-10-07 4 views
0

Я создаю свой пользовательский EditText, который проверяет электронную почту и другие вещи на фокусе, потерянном, и если он недействителен, тогда сфокусируйтесь. Он отлично работает, если у меня есть только один EditText, но когда у меня есть несколько EditText, он бесконечно фокусируется между полями editText, поскольку он пытается проверить валидацию в обоих. Вот мой пример кода.Custom EditText validation

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(); 

    } 
}); 
} 

ответ

1

Пут изменение OnFocus Лизнером на родительском виде с ViewGroup получить вид ребенка и Чек это и будет получить perticular редактировать текст. У меня было какое-то требование, я решил это так.

TableLayout tableView = (TableLayout)findViewById(R.id.mydetails_tableview); 
View mytempView=null; 
     int noOfChilds=tableView.getChildCount(); 
     for(int i=0;i<noOfChilds;i++) 
     { 
      mytempView=tableView.getChildAt(i); 
      if(i%2==0) 
      { 
       View vv=((TableRow) mytempView).getChildAt(1); 
       if(vv instanceof EditText) 
       { 
        //Log.v("This one is edit text---", "here there"); 
        ((EditText) vv).setText(""); 
       } 
      } 
     } 
+0

Thanx ... это сработало для меня –

+0

plzz upvote it @HetalUpadhyay – DropAndTrap

1
boolean pendingFocus = false; 

Перед

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

    } 
}); 

Добавить

pendingFocus = true; 

и замена:

if(!hasFocus && isRequire){ 

с

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

Наконец сброс 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; 
}