Android EditText дублирует каждый символ, который я печатаю

У меня есть несколько строк объектов EditText, которые поддерживаются моим пользовательским классом BaseAdapter.

Объекты EditText должны принимать только числа. На показанном изображении я набрал «12345». Как видите, все, что я печатаю, тут же дублируется.

Я обнаружил, что проблема исчезнет, ​​если я удалю строку кода, которая фильтрует EditText для чисел:

et.setInputType(InputType.TYPE_CLASS_PHONE);

Есть идеи, что происходит?

Я использую TextWatcher для прослушивания ввода, который вы можете увидеть в методе getView():

public View getView(int position, View convertView, ViewGroup parent) {

            final ViewHolder holder;

            if (convertView == null) {
                convertView = getLayoutInflater().inflate(R.layout.number, null);
                holder = new ViewHolder();              
                holder.editText = (EditText) convertView.findViewById(R.id.number_edittext);
                holder.editText = setEditTextFilters(holder.editText);
                holder.editText.addTextChangedListener(new TextWatcher() {                      
                    public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2){}
                    public void onTextChanged(CharSequence s, int start, int before, int count) {}
                    public void afterTextChanged(Editable s) {
                        textBoxStrings[holder.row] = s.toString(); 
                        System.out.println("row: " + holder.row + " " + s.toString());
                    }
                });

                convertView.setTag(holder); 
            }
            else {
                holder = (ViewHolder) convertView.getTag();
            }

            holder.row = position;
            holder.editText.setText(textBoxStrings[holder.row]);

            TextView rowtext = (TextView) convertView.findViewById(R.id.number_rowtext);
            rowtext.setText("Row " + holder.row);
            return convertView;
}

Фильтры добавляются в EditText с помощью следующего метода:

public EditText setEditTextFilters(EditText et) {           
        int maxLength = numColsMEM;
        InputFilter[] FilterArray = new InputFilter[1];
        FilterArray[0] = new InputFilter.LengthFilter(maxLength);
        et.setFilters(FilterArray);
        et.setInputType(InputType.TYPE_CLASS_PHONE);
        et.setSingleLine();
        return et;
}

Что я вижу после ввода цифр 12345


person Rob    schedule 19.11.2011    source источник
comment
просто слепое предложение: пробовали ли вы использовать android:phone в макете XML вместо его программной настройки?   -  person hovanessyan    schedule 20.11.2011
comment
Это действие обрабатывает несколько возможностей. Если я нахожусь в другом игровом режиме, то символы будут разрешены, поэтому я должен установить свойства программно.   -  person Rob    schedule 20.11.2011


Ответы (2)


У меня есть подозрение, что проблема может заключаться в том, что ваш textChangedListener не должен устанавливать textBoxStrings[holder.row], потому что textChangedListener по умолчанию, вероятно, уже делает это.

person Zoltán    schedule 19.11.2011
comment
не уверен, что вы подразумеваете под textChangedListener по умолчанию. Другая причуда заключается в том, что текст дублируется только в том случае, если я нажимаю клавишу фактического числа. В режиме ввода телефона, если я использую букву, отображается правильный номер, и он только один. - person Rob; 20.11.2011

Была проблема с эмулятором, не возникает на реальном устройстве. Одна из тех вещей.

person Rob    schedule 05.02.2012