MultiAutoCompleteTextView不接受空格

时间:2017-02-15 14:36:55

标签: android multiautocompletetextview

我的问题是,当我在public class TestThr implements Runnable { static SeparatedClass monitor; public static void main(String[] args) { monitor = new SeparatedClass(); Thread t=new Thread(new TestThr()); Thread t1=new Thread(new TestThr()); t.start(); t1.start(); } @Override public void run() { monitor.sync(); } } class SeparatedClass { public synchronized void sync(){ for (int i=0;i<10;i++){ System.out.println("Running "+Thread.currentThread().getName()); } } } 中建议句子时,当我按空格键时,建议就会消失。 例如:

建议的字词:

  

THE ROCK
THE BALL
THERMAL

如果我写&#34; THE&#34;,则会显示所有句子,但如果我写了#34; THE&#34; (有空格)建议被驳回。 我想要的是,如果你写了#34; THE&#34;,元素&#34; THE ROCK&#34;和&#34; THE BALL&#34;用建议的单词显示。

感谢。

2 个答案:

答案 0 :(得分:0)

看一下这篇文章:

  

https://groups.google.com/forum/#!topic/android-developers/OrsN2xRpDmA   我刚遇到类似的问题,写了一个简单的多字派生。它默认为&#34;,&#34;分隔符,但您可以使用&#34; setSeparator&#34;设置它。方法。      这个堆栈溢出的答案可能会有所帮助,因为它会遇到同样的问题:   AutoCompleteTextView backed by CursorLoader

答案 1 :(得分:0)

您应该实现MultiAutoCompleteTextView.Tokenizer并创建一个spaceTokenizer,如下所示。然后设置multiAutoCompleteTextView.setTokenizer(new SpaceTokenizer());

public class SpaceTokenizer implements MultiAutoCompleteTextView.Tokenizer {

public int findTokenStart(CharSequence text, int cursor) {
    int i = cursor;

    while (i > 0 && text.charAt(i - 1) != ' ') {
        i--;
    }
    while (i < cursor && text.charAt(i) == ' ') {
        i++;
    }

    return i;
}

public int findTokenEnd(CharSequence text, int cursor) {
    int i = cursor;
    int len = text.length();

    while (i < len) {
        if (text.charAt(i) == ' ') {
            return i;
        } else {
            i++;
        }
    }

    return len;
}

public CharSequence terminateToken(CharSequence text) {
    int i = text.length();

    while (i > 0 && text.charAt(i - 1) == ' ') {
        i--;
    }

    if (i > 0 && text.charAt(i - 1) == ' ') {
        return text;
    } else {
        if (text instanceof Spanned) {
            SpannableString sp = new SpannableString(text + " ");
            TextUtils.copySpansFrom((Spanned) text, 0, text.length(),
                    Object.class, sp, 0);
            return sp;
        } else {
            return text + " ";
        }
    }
}
}