在多个edittext字段上实现TextWatcher

时间:2013-10-18 01:34:30

标签: android android-edittext textwatcher

我有这个应用程序,我动态创建多个EditTexts。金额取决于用户输入。我想在输入两个字符后让焦点更改为下一个edittext。到目前为止我有这个:

for(EditText editText : editTextList ) {

        editText.addTextChangedListener(new TextWatcher() {

            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {
                // TODO Auto-generated method stub

            }

            @Override
            public void beforeTextChanged(CharSequence s, int start, int count,
                    int after) {
                // TODO Auto-generated method stub

            }

            @Override
            public void afterTextChanged(Editable s) {

                if(s.toString().length() == 2) {
                    //code to change focus to next edit text goes here
                }

            }
        });
    }

第一个问题是,如果用户输入一个大数字(在此上下文中的平均值可能是100-600个EditText字段),这可能会创建许多TextWatcher实例。

第二个问题是如何在afterTextChanged方法中更改焦点,因为我想将焦点更改为远离当前在循环内表示的焦点的下一个EditText。

我是否应该关注多个TextWatcher对象的潜在性能问题?我应该废弃整个实施并关注其他地方吗?任何建议将不胜感激。

1 个答案:

答案 0 :(得分:0)

由于您在运行时可能有很多EditTexts ,我建议您使用EditText的 maxlength 属性,这样您将限制用户只输入2个字符。

像这样

EditText editText = new EditText(this);
int maxLength = 2;    
editText.setFilters(new InputFilter[] {new InputFilter.LengthFilter(maxLength)});

现在在键盘中添加下一个按钮就像这样

yourEditText.setImeOptions(EditorInfo.IME_ACTION_NEXT);

下一个按钮的默认行为是将焦点更改为下一个视图,该视图将输入置于相同的父布局中。