我有一项活动,我从用户信用卡的序列号中获取。 它包含四个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次更好的解决方案?
答案 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
}