java.lang.IndexOutOfBoundsException:長さ118を超えsetSpan(118 ... 119)終了

S・シャー:

私は別の質問を検索するが、私の問題について何も特定のを見つけました。私は色を選択することで、テキストの色を変更し、私はこのエラーを取得するカラーテキストを入力した後、私のエディットテキストの削除を開始したときただし、正常に動作しています。

myedittext.addTextChangedListener(new TextWatcher() {
        @Override
        public void beforeTextChanged(CharSequence s, int start, int count, int after) {
        }

        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {
            spannableString.setSpan(new ForegroundColorSpan(Color.parseColor(txtColor)), start, start+1, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);

        }
        @Override
        public void afterTextChanged(Editable s) {
        }
    });
}

私は次のエラーを取得します

java.lang.IndexOutOfBoundsException: setSpan (118 ... 119) ends beyond length 118
    at android.text.SpannableStringBuilder.checkRange(SpannableStringBuilder.java:1309)
    at android.text.SpannableStringBuilder.setSpan(SpannableStringBuilder.java:680)
    at android.text.SpannableStringBuilder.setSpan(SpannableStringBuilder.java:672)
    at com.apps.primalnotes.Fragments.EditorFragment$16.onTextChanged(EditorFragment.java:842)
    at android.widget.TextView.sendOnTextChanged(TextView.java:10611)
    at android.widget.TextView.handleTextChanged(TextView.java:10715)
    at android.widget.TextView$ChangeWatcher.onTextChanged(TextView.java:14057)

私はこのようになりました2色で書いています

ここでは、画像の説明を入力します。

今私はそれを保存するとき。それだけでこのようなショーに私をピンク色に保存されますが、今私は保存、それが再びそれが色で保存する変更しなくても、私はそれを書いたとき、ここでは、画像の説明を入力します。 ここでは、画像の説明を入力します。ここでは、画像の説明を入力します。

リチャードMcFriendテキサス:

onTextChanged方法は、内ことを伝えるために呼び出されCharSequence sた文字の数は、count先頭にstart長さだけを持っていた古いテキストを置き換えていますbefore

何が起こっていることはあなたが7つの文字の前に持っていた場合は、ユーザーを押すとバックスペースは、スタートがあなたのCharSequenceすなわちの上限であるときに、スタートは最後の要素と同じである6であるということです。あなたはやっているstart+1、常にインデックス範囲の数のうちです。

myedittext.addTextChangedListener(new TextWatcher() {
        @Override
        public void beforeTextChanged(CharSequence s, int start, int count, int after) {
        }

        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {
            if(start < s.length() - 1 || count > before){
                spannableString.setSpan(new ForegroundColorSpan(Color.parseColor(txtColor)), start, start+1, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
            }

        }
        @Override
        public void afterTextChanged(Editable s) {
        }
    });
}

そのコードを試して取得していないが、それは動作するはずです。それはあなたが間違って何をしているかのアイデアと何をやるべきことを表示するだけです。

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=224238&siteId=1
おすすめ