Многократный токенизатор в multiautocompletetextview - PullRequest
0 голосов
/ 28 января 2019

Я пытаюсь установить несколько токенизаторов на 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 голосов
/ 05 февраля 2019

Работает с приведенным ниже решением.

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