我想以顺序的方式填写3 EditText of maxlength=1
。
即用户同时键入3个字符,然后填写3个编辑文本。
想要将这3个editText放在ArrayList
&用户在单独的arraylist中输入的内容。
当用户选择EditText时,其TextWatcher's afterTextChanged
将被调用&然后角色将被插入到arraylist中。
然后将在字符列表的大小上声明一个循环,并且对于arraylist中的每个元素,将拾取相应的edittext&填充。
类似的东西:
private TextWatcher myTextChangeListener = 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 editable) {
EditText editText = null;
if (mCharList.size() < 3) {
mCharList.add(editable.toString());
}
if (mCharList.size() > 0) {
for (int index = 0; index < mCharList.size(); index++) {
editText = myETList.get(index);
editText.setText(mCharList.get(index));
}
}
}
};
但是只要调用editText.setText(mCharList.get(index));
,就会再次调用afterTextChanged()&amp;并且无限循环开始,引发StackOverFlow异常。
另外我应该如何处理删除/退格键事件。
答案 0 :(得分:1)
您可以通过以下方式扩展EditText类:
//Declaration
private class GenericTextWatcher implements TextWatcher{
private View view;
private GenericTextWatcher(View view) {
this.view = view;
}
public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {}
public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {}
public void afterTextChanged(Editable editable) {
String text = editable.toString();
switch(view.getId()){
case R.id.name:
model.setName(text);
break;
case R.id.email:
model.setEmail(text);
break;
case R.id.phone:
model.setPhone(text);
break;
}
}
}
如果你知道是谁写的,你可以避免它起作用并停止循环。
答案 1 :(得分:0)
尝试
@Override
public void onFocusChange(View v, boolean hasFocus) {
if (mCharList.size() < 3) {
mCharList.add(editable.toString());
}
if (mCharList.size() > 0) {
for (int index = 0; index < mCharList.size(); index++) {
editText = myETList.get(index);
editText.setText(mCharList.get(index));
}
}
}