Android 自定义编辑文本验证
我正在创建我的自定义EditText,用于验证电子邮件和其他关于focus lost的内容,如果无效,则返回focus。如果我只有一个EditText,它可以正常工作,但当我有多个EditText时,它会在我的EditText框之间无限聚焦,因为它会尝试检查两个框中的验证。这是我的示例代码Android 自定义编辑文本验证,android,android-edittext,Android,Android Edittext,我正在创建我的自定义EditText,用于验证电子邮件和其他关于focus lost的内容,如果无效,则返回focus。如果我只有一个EditText,它可以正常工作,但当我有多个EditText时,它会在我的EditText框之间无限聚焦,因为它会尝试检查两个框中的验证。这是我的示例代码 public void init(){ this.setOnFocusChangeListener(new OnFocusChangeListener() { @Override p
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();
}
});
}
public void init(){
this.setOnFocusChangeListener(新的OnFocusChangeListener(){
@凌驾
public void onFocusChange(视图v,布尔hasFocus){
//TODO自动生成的方法存根
最终MyEditText ed=MyEditText.this;
//检查是否需要现场验证
如果(!hasFocus&&isRequest){
if(ed.getText().toString().length()0){
ed.setError(空);
}
}
}
私有void setErrorMsg(最终编辑文本,字符串msg){
if(errorMessage!=null&&errorMessage.length()>0){
msg=错误消息;
}
ed.setError(msg);
ed.post(新Runnable(){
公开募捐{
ed.requestFocus();
}
});
}
以前
ed.post(new Runnable() {
public void run() {
ed.requestFocus();
}
});
加
并替换:
if(!hasFocus && isRequire){
与
最后,在此处使用新的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;
}
if(ed.getText().toString().length()0){
ed.setError(空);
}否则{
pedingFocus=false;
}
在视图组的父视图上启用焦点更改lisner获取子视图并选中它,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("");
}
}
}
TableLayout tableView=(TableLayout)findviewbyd(R.id.mydetails\u tableView);
查看mytempView=null;
int noOfChilds=tableView.getChildCount();
对于(int i=0;i
if(!hasFocus && isRequire && !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;
}
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("");
}
}
}