我有这个应用程序,我动态创建多个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对象的潜在性能问题?我应该废弃整个实施并关注其他地方吗?任何建议将不胜感激。
答案 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);
下一个按钮的默认行为是将焦点更改为下一个视图,该视图将输入置于相同的父布局中。