multiautocompletetextview 中的多个分词器

Multiple tokenizer at multiautocompletetextview

我试图在 MultiAutoCompleteTextView 设置多个分词器。例如,如果用户输入逗号或分号,它应该调用我的适配器。

到目前为止我尝试了什么

public class CommaTokenizer implements MultiAutoCompleteTextView.Tokenizer {
    public int findTokenStart(CharSequence text, int cursor) {
        int i = cursor;

        while (i > 0 && ((text.charAt(i - 1) != ',')||(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) == ','||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) == ',')||(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 + ", ";
            }
        }
    }
}

但这不是 working.My 适配器未获得 called.Any 帮助将不胜感激。

它正在使用以下解决方案。

public class CommaTokenizer implements MultiAutoCompleteTextView.Tokenizer {
    public int findTokenStart(CharSequence text, int cursor) {
        int i = cursor;

        while (i > 0) {
            if ((text.charAt(i - 1) == ';') || (text.charAt(i - 1) == ',')) {
                return i - 1;
            }
            i--;
            return i;
        }

        return i;
    }

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

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