使用getCurrentFocus时requestFocus不会更改焦点

时间:2018-10-06 15:24:55

标签: java android android-edittext

我正在制作OTP Activity,需要实现删除功能,我有以下应在退格按钮上onKey触发的功能。我的想法是,我可以使用getCurrentFocus来了解当前正在填充的字段,然后使用requestFocus来选择之前的那个,但是似乎不起作用,我还有一个{{1 }}效果很好,所以我很困惑为什么。

enter image description here

goToNext

下面是 public void goToPrevious() { EditText currentFocus = (EditText) getCurrentFocus(); if (currentFocus == otpOne) { return; } if (currentFocus == otpTwo) { otpOne.requestFocus(); return; } if (currentFocus == otpThree) { otpTwo.requestFocus(); return; } if (currentFocus == otpFour) { otpThree.requestFocus(); return; } } 的代码,效果很好。

goToNext

我通过实现onKeyListener来调用goToPrevious,下面是代码

public void goToNext() {
    EditText currentFocus = (EditText) getCurrentFocus();

    if (currentFocus == otpOne) {
        otpTwo.requestFocus();

        return;
    }

    if (currentFocus == otpTwo) {
        otpThree.requestFocus();

        return;
    }

    if (currentFocus == otpThree) {
        otpFour.requestFocus();

        return;
    }

    if (currentFocus == otpFour) {
        return;
    }
}

2 个答案:

答案 0 :(得分:1)

由于一些非常奇怪的原因,我必须通过将getCurrentFocus的值直接传递到goToPrevious来修复它,getCurrentFocus处理程序中的onKey的值不同于{ {1}},下面是我最终得到的代码。

goToPrevious

答案 1 :(得分:0)

您可以按以下方式使用:

et1.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(s.length()==1)
                    {
                        et2.requestFocus();
                    }
                    else if(s.length()==0)
                    {
                        et1.clearFocus();
                    }
                }
            });

            et2.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(s.length()==1)
                    {
                        et3.requestFocus();
                    }
                    else if(s.length()==0)
                    {
                        et1.requestFocus();
                    }
                }
            });

            et3.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(s.length()==1)
                    {
                        et4.requestFocus();
                    }
                    else if(s.length()==0)
                    {
                        et2.requestFocus();
                    }
                }
            });

            et4.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(s.length()==1)
                    {
                        et5.requestFocus();
                    }
                    else if(s.length()==0)
                    {
                        et3.requestFocus();
                    }
                }
            });

            et5.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(s.length()==1)
                    {
                        et6.requestFocus();
                    }
                    else if(s.length()==0)
                    {
                        et4.requestFocus();
                    }
                }
            });

            et6.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(s.length()==1)
                    {
                        et6.clearFocus();
                    }
                    else if(s.length()==0)
                    {
                        et5.requestFocus();
                    }
                }
            });