Java edittext上的请求焦点无法正常工作

Java edittext上的请求焦点无法正常工作,java,android,android-studio,Java,Android,Android Studio,我有4个edittext,充当“输入您的pin”字段,每个edittext设置为在请求聚焦到下一个edittext之前只能获取一个数字。如果我为第一个pin输入一个数字,它会请求将焦点对准第二个,然后再对准第三个,以此类推 我现在想做的是,如果用户点击第二个编辑文本或第三个,而第一个字段还没有输入,它应该返回并关注第一个字段 我尝试使用onTouchListener来实现这一点,我注意到,在首先单击第二个编辑文本而不是单击左/第一个编辑文本后,我可以看到焦点返回到第一个编辑文本,但几乎在一瞬间

我有4个edittext,充当“输入您的pin”字段,每个edittext设置为在请求聚焦到下一个edittext之前只能获取一个数字。如果我为第一个pin输入一个数字,它会请求将焦点对准第二个,然后再对准第三个,以此类推

我现在想做的是,如果用户点击第二个编辑文本或第三个,而第一个字段还没有输入,它应该返回并关注第一个字段

我尝试使用onTouchListener来实现这一点,我注意到,在首先单击第二个编辑文本而不是单击左/第一个编辑文本后,我可以看到焦点返回到第一个编辑文本,但几乎在一瞬间立即返回到第二个编辑文本,最终仍然保持对第二个编辑文本的关注

我还使用onClickListener进行了测试。它确实可以工作,但需要点击两下。所以我会点击第二版文本,什么都不会发生,然后我再次点击它,然后将焦点移回第一版文本,但我需要它在第一次点击时发生

这是代码的一部分

pin1EditTxt.addTextChangedListener(new TextWatcher() {
            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after) {

            }

            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {

            }

            @Override
            public void afterTextChanged(Editable s) {
                if(pin1EditTxt.getText().toString().length()==1)     //size as per your requirement
                {
                    pin2EditTxt.requestFocus();
                }
            }
        });

//        pin2EditTxt.setOnTouchListener(new View.OnTouchListener() {
//            @Override
//            public boolean onTouch(View v, MotionEvent event) {
//                if(pin1EditTxt.length() == 0){
//                    pin2EditTxt.clearFocus();
//                    pin1EditTxt.requestFocus();
//                }
//                return false;
//            }
//        });

        pin2EditTxt.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if(pin1EditTxt.length() == 0){
                    pin1EditTxt.requestFocus();
                }
            }
        });
        
        pin2EditTxt.addTextChangedListener(new TextWatcher() {
            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after) {

            }

            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {

            }

            @Override
            public void afterTextChanged(Editable s) {
                if(pin2EditTxt.getText().toString().length()==1)     //size as per your requirement
                {
                    pin3EditTxt.requestFocus();
                }
            }
        });

        pin3EditTxt.addTextChangedListener(new TextWatcher() {
            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after) {

            }

            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {

            }

            @Override
            public void afterTextChanged(Editable s) {
                if(pin3EditTxt.getText().toString().length()==1)     //size as per your requirement
                {
                    pin4EditTxt.requestFocus();
                }
            }
        });

        pin4EditTxt.addTextChangedListener(new TextWatcher() {
            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after) {

            }

            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {

            }

            @Override
            public void afterTextChanged(Editable s) {
                //Hide keyboard
                InputMethodManager imm = (InputMethodManager) getSystemService(Activity.INPUT_METHOD_SERVICE);
                imm.toggleSoftInput(InputMethodManager.HIDE_IMPLICIT_ONLY, 0);
                editTxtWrapper.requestFocus();
            }
        });

我想你应该在onclick中使用pin1EditTxt.getText().toString().length()==0,而不是pin1EditTxt.length()==0。

如果你在4
Edittext
中使用
TextWatcher
,那么你试图这么做可能会很痛苦。我去过那里。看看它是否达到了目的。您可以查看源代码并学习。