Я получаю ошибку SetSantspan начинается до 0 в - PullRequest
0 голосов
/ 11 ноября 2018

Я получаю следующую ошибку, не знаю, что случилось с моим кодом. Когда он выделен жирным шрифтом и курсивом, текст, выделенный курсивом, иногда удаляется, а иногда нет, и затем появляется эта ошибка.

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);
              }
          }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...