目前我有两个编辑文本,假设我想对空的edittext检查进行验证。什么是运行时验证的更好方法。
我的代码是;
final EditText ev1 = (EditText) findViewById(R.id.editText1);
final EditText ev2 = (EditText) findViewById(R.id.editText2);
ev1.setOnFocusChangeListener(new OnFocusChangeListener() {
@Override
public void onFocusChange(View rv, boolean hasFocus) {
if(!hasFocus && ev1.getText().length()==0)
{
ev1.requestFocus();
ev2.clearFocus();
}
}
});
在第二个editText的onclick中,当First Edittext为空时,它会清除第二个EditText的焦点,但键盘输入总是在第二个文本中完成,我们永远无法在第一个文本中获得焦点。
请不要为不同的EditText建议不同的焦点监听器,因为这个editText也可以动态添加。
更清晰:在失去焦点之前验证ev1很简单,不允许其他视图获得焦点,直到输入任何字符为止。
答案 0 :(得分:9)
final EditText ev1 = (EditText) findViewById(R.id.editText1);
final EditText ev2 = (EditText) findViewById(R.id.editText2);
ev1.setOnFocusChangeListener(new OnFocusChangeListener() {
@Override
public void onFocusChange(View rv, boolean hasFocus) {
if(!hasFocus && ev1.getText().length()==0)
{
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
ev2.clearFocus();
ev1.requestFocus();
}
}, 100);
}
}
});
答案 1 :(得分:0)
试试这个:
编辑:
final EditText ev1,ev2,ev3,ev4,ev5,ev6;
ev1 = (EditText) findViewById(R.id.editText1);
ev2 = (EditText) findViewById(R.id.editText2);
ev3 = (EditText) findViewById(R.id.editText3);
ev4 = (EditText) findViewById(R.id.editText4);
ev5 = (EditText) findViewById(R.id.editText5);
ev6 = (EditText) findViewById(R.id.editText6);
setValidateAction(ev2);
setValidateAction(ev3);
setValidateAction(ev4);
setValidateAction(ev5);
setValidateAction(ev6);
声明此方法:
public void setValidateAction(final EditText edit_action) {
edit_action.setOnFocusChangeListener(new OnFocusChangeListener() {
public void onFocusChange(View v, boolean hasFocus) {
if(hasFocus && ev1.getText().length()==0){
ev1.requestFocus();
}
}
});
}
感谢。
答案 2 :(得分:0)
我已经使用了两个文本框的xml,并尝试这种方式来解决您的问题。
检查以下代码并告诉我你可以吗?
setContentView(R.layout.activity_main);
final EditText password = (EditText)findViewById(R.id.editText1);
final EditText confirmpassword = (EditText)findViewById(R.id.editText2);
password.addTextChangedListener(new TextWatcher() {
public void onTextChanged(CharSequence s, int start, int before, int count) {
if(password.getText().toString().trim().length()==0)
{
confirmpassword.setText("");
}
}
public void beforeTextChanged(CharSequence s, int start, int count,
int after) {
}
public void afterTextChanged(Editable s) {
}
});
confirmpassword.setOnFocusChangeListener(new OnFocusChangeListener() {
public void onFocusChange(View v, boolean hasFocus) {
if(hasFocus && password.getText().toString().trim().length()==0)
{
// First fill password
password.requestFocus();
}
}
});
答案 3 :(得分:0)
add.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v)
{
if (isEmpty(name)) {
return;
}
}
});
public boolean isEmpty(EditText... editTexts)
{
boolean res=true;
for (EditText editText:editTexts) {
if (TextUtils.isEmpty(editText.getText())) {
editText.setError("Fill field");
editText.requestFocus();
res = true;
break;
}
else {
res = false;
}
}
return res;
}