multiautocompletetextview上的多个标记器

时间:2019-01-28 07:07:35

标签: java android 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 + ", ";
            }
        }
    }
}

但是它不起作用。我的适配器没有被调用。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

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

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 + ";";
                }
            }
        }
    }
}