在AutoCompleteTextView中覆盖Backspace的默认行为

时间:2012-03-22 07:19:19

标签: android autocompletetextview backspace

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

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

如何消除此行为并让AutoComplete中的文本正常运行?

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

提前致谢。 :)

2 个答案:

答案 0 :(得分:1)

我认为您使用添加MultiAutoCompleteTextView的{​​{1}}。 如果你使用 setTokenizer(new SpaceTokenizer())代替AutoCompleteTextView并删除MultiAutoCompleteTextView 问题就会消失。

答案 1 :(得分: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) {
        }
    });