2013-10-07 80 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; 
}