5

我正在使用 AutoCompleteTextView,退格按钮的默认行为是这样的。

假设我输入“Ar”,这给了我一个建议“Argentina”,我从下拉列表中选择“Argentina”...文本现在变为“Argentina”。但是说我需要删除最后一个字符,所以我在键盘上按退格键,AutocompleteTextView 会删除所有文本,直到我输入的点(即文本现在再次变为“Ar”)。

我如何消除这种行为并让自动完成中的文本正常运行?

起初我以为它是某种 SpannableString,所以我称之为“clearSpans()”,但它似乎不起作用。任何指针?

提前致谢。:)

4

2 回答 2

1

我认为您使用MultiAutoCompleteTextViewwhich 添加setTokenizer(new SpaceTokenizer()). 如果您使用 AutoCompleteTextView而不是MultiAutoCompleteTextView并删除setTokenizer(...) 该问题将消失。

于 2015-11-10T08:21:06.433 回答
0

我没有找到任何解决方案,但最后我发现,这段代码对我有用:

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) {
        }
    });
于 2019-04-26T13:16:41.087 回答