我正在创建我的自定义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();
}
});
}
答案 0 :(得分: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;
}
答案 1 :(得分:1)
将onfocus更改lisner放在viewGroup的父视图中获取子视图并确定它将获得特定的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("");
}
}
}