簡體   English   中英

Android SpannableStringBuilder IndexOutOfBoundsException

[英]Android SpannableStringBuilder IndexOutOfBoundsException

最近,由於 Android 在內部拋出 IndexOutOfBoundsException,我們的應用程序中遇到了很多崩潰。

該問題發生在具有 static 布局的屏幕上,該布局由 API 級別 26 -> 31 上的 TextView、復選框和按鈕以及所有制造商組成。

我們無法以任何方式重現它,但我們嘗試通過在 TextViews 上設置android:importantForAccessibility="no"來“盲目地”修復它。

我很高興聽到任何想法可能是什么問題:)

Fatal Exception: java.lang.IndexOutOfBoundsException: setSpan (-1 ... -1) starts before 0
       at android.text.SpannableStringBuilder.checkRange(SpannableStringBuilder.java:1318)
       at android.text.SpannableStringBuilder.setSpan(SpannableStringBuilder.java:684)
       at android.text.SpannableStringBuilder.setSpan(SpannableStringBuilder.java:676)
       at android.view.accessibility.AccessibilityNodeInfo.setText(AccessibilityNodeInfo.java:2474)
       at android.widget.TextView.onInitializeAccessibilityNodeInfoInternal(TextView.java:10642)
       at android.view.View.onInitializeAccessibilityNodeInfo(View.java:7345)
       at android.view.View.createAccessibilityNodeInfoInternal(View.java:7304)
       at android.view.View.createAccessibilityNodeInfo(View.java:7289)
       at android.view.accessibility.AccessibilityRecord.setSource(AccessibilityRecord.java:146)
       at android.view.accessibility.AccessibilityRecord.setSource(AccessibilityRecord.java:119)
       at android.view.View.onInitializeAccessibilityEventInternal(View.java:7241)
       at android.widget.TextView.onInitializeAccessibilityEventInternal(TextView.java:10623)
       at android.view.View.onInitializeAccessibilityEvent(View.java:7229)
       at android.view.View.sendAccessibilityEventUncheckedInternal(View.java:7091)
       at android.view.View.sendAccessibilityEventUnchecked(View.java:7076)
       at android.view.View$SendViewStateChangedAccessibilityEvent.run(View.java:26260)
       at android.os.Handler.handleCallback(Handler.java:808)
       at android.os.Handler.dispatchMessage(Handler.java:101)
       at android.os.Looper.loop(Looper.java:166)
       at android.app.ActivityThread.main(ActivityThread.java:7529)
       at java.lang.reflect.Method.invoke(Method.java)
       at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:245)
       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:921)

我解決了這個問題。

在我們的例子中,問題是我們使用了一個 ClickableSpan,它也擴展了 NoCopySpan 接口。 設置 android:importantForAccessibility="no" 只是部分修復,因為這個標志可以被忽略(如果你想支持可訪問性,你也可能需要避免這個標志)。

因此解決方案是刪除接口並始終在給定片段的 onDestroyView 方法中將給定 TextView 的文本設置為 null。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM