Переопределить поведение Backspace по умолчанию в AutoCompleteTextView

Я использую AutoCompleteTextView, поведение кнопки возврата по умолчанию выглядит примерно так.

Скажем, я набираю «Ar», это дает мне предложение «Аргентина», я выбираю «Аргентина» из раскрывающегося списка ... Текст теперь становится «Аргентина». Но скажем, мне нужно удалить последний символ, поэтому я нажимаю клавишу Backspace на клавиатуре, и AutocompleteTextView удаляет весь текст до точки, которую я набрал (т.е. теперь текст снова становится «Ar»).

Как устранить это поведение и позволить тексту в автозаполнении вести себя нормально?

Сначала я подумал, что это какая-то SpannableString, поэтому я вызвал «clearSpans()», но, похоже, это не работает. Любые указатели?

Заранее спасибо. :)


person st0le    schedule 22.03.2012    source источник


Ответы (2)


Я думаю, вы используете MultiAutoCompleteTextView, которые добавляют setTokenizer(new SpaceTokenizer()). Если вы используете AutoCompleteTextView вместо MultiAutoCompleteTextView и удаляете setTokenizer(...), проблема исчезнет.

person Ted Yu    schedule 10.11.2015

Я не нашел никакого решения, но, наконец, я понял, этот код работал для меня:

editText.addTextChangedListener(new TextWatcher() {
        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {
            try {
                // removing QwertyKeyListener.Replaced span
                Editable text = editText.getText();
                Object[] spans = text.getSpans(0, text.length(), Object.class);
                if (spans != null) {
                    for (int i = spans.length - 1; i >= 0; i--) {
                        Object o = spans[i];
                        String desc = "" + o; // This is a hack, not a perfect solution, but works. "QwertyKeyListener.Replaced" is a private type
                        if (desc.indexOf("QwertyKeyListener$Replaced") != -1) {
                            text.removeSpan(o);
                        }
                    }
                }
            } catch (Throwable e) {
                MyUtil.msgError(e);
            }
        }

        @Override
        public void beforeTextChanged(CharSequence s, int start, int count, int after) {
        }

        @Override
        public void afterTextChanged(Editable s) {
        }
    });
person Miki    schedule 26.04.2019