将焦点移动到数组中的下一个EditText

时间:2015-04-24 08:32:20

标签: android

我有一项活动,我从用户信用卡的序列号中获取。 它包含四个editTexts - 每个用于4位数。 我已经为editTexts使用了一个数组 -

EditText[] editSerial = new EditText[4];

我用

限制了每个editText中输入的长度
android:maxLength="4"

一旦用户输入了当前的4位数字,我希望焦点移动到下一个editText。 我已经看到了这个答案 - How to automatically move to the next edit text in android

et1.addTextChangedListener(new TextWatcher() {

public void onTextChanged(CharSequence s, int start,int before, int count) 
{
    // TODO Auto-generated method stub
    if(et1.getText().toString().length()==size)     //size as per your requirement
    {
        et2.requestFocus();
    }
}

有没有比重复此代码3次更好的解决方案?

1 个答案:

答案 0 :(得分:1)

有点儿。你需要一个TextWatcher,但是你可以把它作为一个合适的类提取出来,这样你就可以传入指示View的参数来关注下一个。

那就好像

et1.addTextChangedListener(new FocusSwitchingTextWatcher(et2));
et2.addTextChangedListener(new FocusSwitchingTextWatcher(et3));
et3.addTextChangedListener(new FocusSwitchingTextWatcher(et4));

班级:

private static class FocusSwitchingTextWatcher implements TextWatcher {

    private final View nextViewToFocus;

    TextWatcher(View nextViewToFocus) {
        this.nextViewToFocus = nextViewToFocus;
    }

    @Override
    public void onTextChanged(CharSequence s, int start, int before, int count) {
        if (s.length > size) {
            nextViewToFocus.requestFocus();
        }
    }

    ... // the other textwatcher methods 

}