SpannableString в пределах длины onTextChanged не правильно - PullRequest
0 голосов
/ 16 октября 2018

Я пытаюсь использовать приведенный ниже код, чтобы поймать, когда пользователь вводит @symbol, а затем выделяет исходный текст в tag_color, независимо от того, где он напечатан в mPostTextView.Я все еще относительно новичок в разработке Android, поэтому я не уверен, почему я получаю следующее сообщение об ошибке, ссылающееся на java.lang.IndexOutOfBoundsException: charAt: .... как показано ниже, которое, кажется, связано с длиной символа charAt.(начало) заявление.Кто-нибудь может пролить свет на это?

 @Override
            public void onTextChanged(CharSequence charSequence, int start, int before, int count) {
                //@Mentions for tagging user
                if (charSequence.charAt(start) == '@') {
                    SpannableStringBuilder spannableStringBuilder = new SpannableStringBuilder(mPostToText.getText().toString());
                    ForegroundColorSpan foregroundSpan = new ForegroundColorSpan(ContextCompat.getColor(getContext(), R.color.tag_color));
                    spannableStringBuilder.setSpan(foregroundSpan, start, spannableStringBuilder.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
                    mPostToText.setText(spannableStringBuilder);

                }

это из журнала

java.lang.IndexOutOfBoundsException: charAt: 22 >= length 22
    at android.text.SpannableStringBuilder.charAt(SpannableStringBuilder.java:119)
    at com.tradezapp.tradezapp.gui.activity.CreatePostActivity$CreatePostFragment$2$override.onTextChanged(CreatePostActivity.java:193)
    at com.tradezapp.tradezapp.gui.activity.CreatePostActivity$CreatePostFragment$2$override.access$dispatch(CreatePostActivity.java)
    at com.tradezapp.tradezapp.gui.activity.CreatePostActivity$CreatePostFragment$2.onTextChanged(CreatePostActivity.java)

1 Ответ

0 голосов
/ 16 октября 2018

попробуйте это, также проверьте длину charSequence,

if (charSequence!=null && String.valueOf(charSequence.charAt(count-1)).equal("@")) {
....}
...