0

我有这个应用程序,可以在其中动态创建多个 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
                }

            }
        });
    }

第一个问题是,如果用户输入大量数字,这可能会创建许多 TextWatcher 实例(在这种情况下,平均可能是 100-600 个 EditText 字段)。

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

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

4

1 回答 1

0

由于您在运行时可能有很多 EditText,我建议您使用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);

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

于 2013-10-18T02:32:37.740 回答