只有当第一个非空的android时,才专注于第二个edittext

时间:2013-01-11 06:54:14

标签: android validation android-edittext onfocus

目前我有两个编辑文本,假设我想对空的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也可以动态添加。

Having Focus in Both Text!!!!

更清晰:在失去焦点之前验证ev1很简单,不允许其他视图获得焦点,直到输入任何字符为止。

4 个答案:

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