2013-10-07 49 views
0

我正在创建自定义的EditText,用于验证焦点丢失的电子邮件和其他内容,以及它是否无效然后再回顾。它工作正常,如果我只有一个EditText,但是当我有多个EditText时,它无限集中在我的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(); 

    } 
}); 
} 

回答

1

看跌的onfocus变化lisner从一个ViewGroup父视图获取子视图及赤它U将得到所述特定的EditText上。我有这样的要求,我解决这个问题。

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用新else语句这里:

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; 
}