Переопределить поведение по умолчанию Backspace в AutoCompleteTextView - PullRequest
5 голосов
/ 22 марта 2012

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

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

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

Сначала я подумал, что это что-то вроде SpannableString, поэтому я назвал clearSpans (), но, похоже, он не работает. Есть указатели?

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

Ответы [ 2 ]

1 голос
/ 10 ноября 2015

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

0 голосов
/ 26 апреля 2019

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

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) {
        }
    });
...