【问题标题】:Android SpannableStringBuilder IndexOutOfBoundsExceptionAndroid SpannableStringBuilder IndexOutOfBoundsException
【发布时间】:2022-01-03 21:11:48
【问题描述】:

最近,由于 Android 内部抛出 IndexOutOfBoundsException,我们的应用程序发生了很多崩溃。

此问题发生在具有静态布局的屏幕上,该布局由 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)

【问题讨论】:

  • 我不知道具体,但我以前见过这个,并且在问题跟踪器上有多个关于它的长期报告,例如issuetracker.google.com/issues/153434501(他们声称已修复)。我个人认为这与您上传新版本时它们运行的​​自动化测试有关(我自己其他时候都没见过),但很难确定,因为它从未解释过!

标签: android textview crash indexoutofboundsexception spannablestringbuilder


【解决方案1】:

我解决了这个问题。

在我们的例子中,问题是我们使用了一个 ClickableSpan,它也扩展了 NoCopySpan 接口。设置 android:importantForAccessibility="no" 只是部分修复,因为这个标志可以被忽略(如果你想支持可访问性,你也可能需要避免这个标志)。

所以解决方案是删除接口,并始终在给定片段的 onDestroyView 方法中将给定 TextView 的文本设置为 null。

【讨论】:

    猜你喜欢
    • 2018-12-01
    • 1970-01-01
    • 2017-01-13
    • 1970-01-01
    • 2015-06-23
    • 2012-05-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多