【问题标题】:IndexOutOfBoundsException in FragmentManager when resuming activity恢复活动时 FragmentManager 中的 IndexOutOfBoundsException
【发布时间】:2017-07-02 07:33:13
【问题描述】:

有什么问题: 我有一个主要活动,在加载时总共添加了 7 个片段:2 个抽屉导航片段、1 个 viewPager 主片段和 4 个 viewpager 子片段。

只要有需要,就会添加新的片段。所以在问题发生之前又添加了两个片段。并且添加的最后一个片段打开了另一个活动“cardActivity”。当此 cardActivity 以编程方式完成后按时完成,然后发生以下错误:

02-14 11:06:29.759 16930-16930/com.myapp.app E/UncaughtException: java.lang.RuntimeException: Unable to resume activity {com.myapp.app/com.myapp.app.Activities.MainActivity}: java.lang.IndexOutOfBoundsException: Invalid index 7, size is 7
at android.app.ActivityThread.performResumeActivity(ActivityThread.java:2800)
at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:2829)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1245)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(ActivityThread.java:5118)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:789)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:605)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.IndexOutOfBoundsException: Invalid index 7, size is 7
at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:255)
at java.util.ArrayList.get(ArrayList.java:308)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1584)
at android.support.v4.app.FragmentManagerImpl.dispatchResume(FragmentManager.java:2842)
at android.support.v4.app.FragmentController.dispatchResume(FragmentController.java:223)
at android.support.v4.app.FragmentActivity.onResumeFragments(FragmentActivity.java:509)
at android.support.v4.app.FragmentActivity.onPostResume(FragmentActivity.java:498)
at android.support.v7.app.AppCompatActivity.onPostResume(AppCompatActivity.java:175)
at android.app.Activity.performResume(Activity.java:5367)
at android.app.ActivityThread.performResumeActivity(ActivityThread.java:2790)
at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:2829) 
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1245) 
at android.os.Handler.dispatchMessage(Handler.java:102) 
at android.os.Looper.loop(Looper.java:136) 
at android.app.ActivityThread.main(ActivityThread.java:5118) 
at java.lang.reflect.Method.invokeNative(Native Method) 
at java.lang.reflect.Method.invoke(Method.java:515) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:789) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:605) 
at dalvik.system.NativeStart.main(Native Method) 
02-14 11:06:30.062 16930-16930/com.myapp.app E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.myapp.app, PID: 16930
java.lang.RuntimeException: Unable to resume activity {com.myapp.app/com.myapp.app.Activities.MainActivity}: java.lang.IndexOutOfBoundsException: Invalid index 7, size is 7
at android.app.ActivityThread.performResumeActivity(ActivityThread.java:2800)
at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:2829)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1245)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(ActivityThread.java:5118)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:789)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:605)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.IndexOutOfBoundsException: Invalid index 7, size is 7
at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:255)
at java.util.ArrayList.get(ArrayList.java:308)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1584)
at android.support.v4.app.FragmentManagerImpl.dispatchResume(FragmentManager.java:2842)
at android.support.v4.app.FragmentController.dispatchResume(FragmentController.java:223)
at android.support.v4.app.FragmentActivity.onResumeFragments(FragmentActivity.java:509)
at android.support.v4.app.FragmentActivity.onPostResume(FragmentActivity.java:498)
at android.support.v7.app.AppCompatActivity.onPostResume(AppCompatActivity.java:175)
at android.app.Activity.performResume(Activity.java:5367)
at android.app.ActivityThread.performResumeActivity(ActivityThread.java:2790)
at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:2829) 
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1245) 
at android.os.Handler.dispatchMessage(Handler.java:102) 
at android.os.Looper.loop(Looper.java:136) 
at android.app.ActivityThread.main(ActivityThread.java:5118) 
at java.lang.reflect.Method.invokeNative(Native Method) 
at java.lang.reflect.Method.invoke(Method.java:515) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:789) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:605) 
at dalvik.system.NativeStart.main(Native Method) 

这个错误是随机出现的,有时会出现有时不会。

到目前为止我所做的尝试: 我试图重现此问题,并检查是否在两者之间删除了某些片段,但没有删除任何片段。

我也在这里发现了同样的问题:https://code.google.com/p/android/issues/detail?id=231430 但是那里也没有解决方案。 在 MainActivity 的 OnResume() 中也没有做任何事情,它只是被覆盖,没有别的:

    @Override
protected void onResume() {
    super.onResume();
}

谁能告诉我这个问题的可能原因是什么?

【问题讨论】:

  • 不贴相关代码没人能帮到你。
  • 但是在 MainActivity 的 OnResume() 中什么也没做,并且在 CardActivity 中完成()在后退按钮按下时被调用。
  • 贴出你的fragment的OnBackStackChangedListener方法的代码。
  • 您的活动扩展什么?您使用的是哪个支持库版本?
  • 发布您的相关代码,例如您如何添加这 7 个片段和东西。

标签: android android-fragments fragment fragmentmanager


【解决方案1】:

试试这个处理异常

 @Override
protected void onPostResume() {
    try {
        super.onPostResume();
    } catch (Exception e) {
        e.printStackTrace();
    }
}

【讨论】:

  • 我仍然遇到了一个例外,但它解决了应用程序崩溃,但它不影响我的应用程序流程,所以我会将其标记为正确答案。
【解决方案2】:

这不是解决方案,而是朝着正确方向迈出的一步:)

我猜这就是问题所在 - https://code.google.com/p/android/issues/detail?id=231430

已经有人报告了此事,目前正在被跟踪。我认为您可以添加 2 美分并帮助您输入有关此问题何时发生的信息,并在可能的情况下提供您的应用程序进行采样。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-10-17
    • 1970-01-01
    • 1970-01-01
    • 2019-02-03
    • 1970-01-01
    • 1970-01-01
    • 2016-11-06
    • 1970-01-01
    相关资源
    最近更新 更多