一次填写编辑文本

时间:2014-01-31 08:03:11

标签: android android-edittext

我想以顺序的方式填写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异常。

另外我应该如何处理删除/退格键事件。

2 个答案:

答案 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));
            }
        }

    }