Я получаю следующую ошибку, не знаю, что случилось с моим кодом. Когда он выделен жирным шрифтом и курсивом, текст, выделенный курсивом, иногда удаляется, а иногда нет, и затем появляется эта ошибка.
2018-11-10 19: 34: 03.032 16997-16997 / com.pilum.apps.primalnotes E / AndroidRuntime: ИСКЛЮЧИТЕЛЬНОЕ ИСКЛЮЧЕНИЕ: основное
Процесс: com.pilum.apps.primalnotes, PID: 16997
java.lang.IndexOutOfBoundsException: setSpan (-1 ... -1) начинается до 0
на android.text.SpannableStringBuilder.checkRange (SpannableStringBuilder.java:1314)
на android.text.SpannableStringBuilder.setSpan (SpannableStringBuilder.java:680)
на android.text.SpannableStringBuilder.setSpan (SpannableStringBuilder.java:672)
на com.apps.primalnotes.Fragments.EditorFragment.italicText2 (EditorFragment.java:393)
в com.apps.primalnotes.Fragments.EditorFragment.access $ 300 (EditorFragment.java:48)
на com.apps.primalnotes.Fragments.EditorFragment $ 5.onClick (EditorFragment.java:129)
на android.view.View.performClick (View.java:6877)
на android.view.View $ PerformClick.run (View.java:26069)
на android.os.Handler.handleCallback (Handler.java:789)
на android.os.Handler.dispatchMessage (Handler.java:98)
на android.os.Looper.loop (Looper.java:164)
на android.app.ActivityThread.main (ActivityThread.java:6938)
в java.lang.reflect.Method.invoke (родной метод)
на com.android.internal.os.Zygote $ MethodAndArgsCaller.run (Zygote.java:327)
на com.android.internal.os.ZygoteInit.main (ZygoteInit.java:1374)
private void italicText2(){
boolean italicExists = false;
Spannable str = texto.getText();
int selStart = texto.getSelectionStart();
int selEnd = texto.getSelectionEnd();
StyleSpan[] styleSpans = texto.getText().getSpans(selStart, selEnd, StyleSpan.class);
for (StyleSpan styleSpan : styleSpans) {
int oldStyle = styleSpan.getStyle();
int spanStart = str.getSpanStart(styleSpan);
int spanEnd = str.getSpanEnd(styleSpan);
if (spanStart < texto.getSelectionStart()) {
str.setSpan(new StyleSpan(oldStyle), spanStart, selStart, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
}
if (spanEnd > texto.getSelectionEnd()) {
str.setSpan(new StyleSpan(oldStyle), selEnd, spanEnd, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
}
if (selEnd > selStart) {
if (oldStyle == Typeface.ITALIC) {
str.removeSpan(styleSpan);
italicExists = true;
}
if (oldStyle == Typeface.BOLD_ITALIC) {
str.setSpan(new StyleSpan(Typeface.BOLD), spanStart, spanEnd, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
italicExists = false;
}
}
}
if (!italicExists) {
Log.d("Tag", "italic section entered");
if (styleSpans.length > 0) {
int lastSpanEnd = 0;
for (StyleSpan styleSpan : styleSpans) {
int oldStyle = styleSpan.getStyle();
int spanStart = str.getSpanStart(styleSpan);
int spanEnd = str.getSpanEnd(styleSpan);
if (spanStart > lastSpanEnd) {
str.setSpan(new StyleSpan(Typeface.ITALIC), lastSpanEnd, spanStart, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
Log.d("TAG", "if italic");
}
lastSpanEnd = spanEnd;
str.removeSpan(styleSpan);
if (oldStyle == Typeface.BOLD) {
str.setSpan(new StyleSpan(Typeface.BOLD_ITALIC), spanStart, spanEnd, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
Log.d("TAG", "Bold and Italic");
}
else {
**str.setSpan(new StyleSpan(Typeface.ITALIC), spanStart, spanEnd, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);**
Log.d("TAG", "else italic");
}
if (spanStart < texto.getSelectionStart()) {
str.setSpan(new StyleSpan(oldStyle), spanStart, selStart, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
Log.d("TAG", "oldstyle italic");
}
if (spanEnd > texto.getSelectionEnd()) {
str.setSpan(new StyleSpan(oldStyle), selEnd, spanEnd, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
Log.d("TAG", "old style end italic");
}
}
if (selEnd != lastSpanEnd) {
str.setSpan(new StyleSpan(Typeface.ITALIC), selStart, selEnd, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
}
}