Java.lang.IllegalArgumentException due to Spannable TextView

I received this crash report in the Google Play console, which I myself have never experienced and could not reproduce.

java.lang.IllegalArgumentException: 
  at android.text.method.WordIterator.checkOffsetIsValid (WordIterator.java:380)
  at android.text.method.WordIterator.isBoundary (WordIterator.java:101)
  at android.widget.Editor$SelectionStartHandleView.positionAtCursorOffset (Editor.java:4300)
  at android.widget.Editor$HandleView.updatePosition (Editor.java:3736)
  at android.widget.Editor$PositionListener.onPreDraw (Editor.java:2513)
  at android.view.ViewTreeObserver.dispatchOnPreDraw (ViewTreeObserver.java:944)
  at android.view.ViewRootImpl.performTraversals (ViewRootImpl.java:2417)
  at android.view.ViewRootImpl.doTraversal (ViewRootImpl.java:1321)
  at android.view.ViewRootImpl$TraversalRunnable.run (ViewRootImpl.java:6708)
  at android.view.Choreographer$CallbackRecord.run (Choreographer.java:894)
  at android.view.Choreographer.doCallbacks (Choreographer.java:696)
  at android.view.Choreographer.doFrame (Choreographer.java:631)
  at android.view.Choreographer$FrameDisplayEventReceiver.run (Choreographer.java:880)
  at android.os.Handler.handleCallback (Handler.java:815)
  at android.os.Handler.dispatchMessage (Handler.java:104)
  at android.os.Looper.loop (Looper.java:207)
  at android.app.ActivityThread.main (ActivityThread.java:5728)
  at java.lang.reflect.Method.invoke (Method.java)
  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run (ZygoteInit.java:789)
  at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:679)

The crash report does not mention which class is causing the crash. My best guess is to follow a custom one TextView.

private void customTextView(TextView view) {
        SpannableStringBuilder spanTxt = new SpannableStringBuilder(
                Html.fromHtml(definition[0]));
        spanTxt.append("\n\nExample");
        spanTxt.setSpan(new ClickableSpan() {
            @Override
            public void onClick(View view) {
                showAlert();
            }
        }, spanTxt.length() -"Example".length(), spanTxt.length(), 0);
        view.setMovementMethod(LinkMovementMethod.getInstance());
        view.setText(spanTxt, TextView.BufferType.SPANNABLE);
    }

Is there a problem with my custom TextView?

+4
source share
4 answers

I deleted your Html.fromHtml (definition [0]) and \ n \ n . Then it worked. Please check these two things if they come or not.

private void customTextView(TextView view) {
    SpannableStringBuilder spanTxt = new SpannableStringBuilder("Testing");
    spanTxt.append("Example");
    spanTxt.setSpan(new ClickableSpan() {
        @Override
        public void onClick(View view) {
          Log.e("tag","show click");
        }
    }, spanTxt.length() -"Example".length(), spanTxt.length(), 0);
    view.setMovementMethod(LinkMovementMethod.getInstance());
    view.setText(spanTxt, TextView.BufferType.SPANNABLE);
}

, . Html.fromHtml( [0]). , \n\n, .

. .

.

+2

AOSP. , :

spanTxt.length() -"Example".length()

(, , "\n\nExample" ?) , ?

+2

, , . , -, TextView , . WordIterator.java :

private void checkOffsetIsValid(int offset) {
   if (!(mStart <= offset && offset <= mEnd)) {
        throw new IllegalArgumentException("Invalid offset: " + (offset) +
           ". Valid range is [" + mStart + ", " + mEnd + "]");
   }
}

I personally have not encountered this problem, but there may be a problem with Android clearing the selection of TextView when calling setText, as explained (with some workarounds) in this IllegalArgumentException message when selecting text in Android TextView

Good luck

+2
source

No problem with spantext code. Coding works fine if the remote variable is -Html.fromHtml(definition[0])

Perhaps a problem with Html.fromHtml(definition[0])

0
source

Source: https://habr.com/ru/post/1694732/


All Articles