Android IllegalStateException:索引#0

时间:2018-08-08 12:20:23

标签: android android-fragments

我有一个带有LinearLayout片段容器的主要抽屉活动,在该容器中我在应用程序上加载了不同状态的片段,这里的问题是这种异常的可能原因是什么,因为我是从崩溃解析日志中获取的,所以不知道重现场景,这是日志

Fatal Exception: java.lang.RuntimeException: Unable to start activity ComponentInfo{me.com.mycompanydomain/me.com.mycompanydomain.ui.activities.MainActivity}: java.lang.IllegalStateException: No instantiated fragment for index #0
   at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2957)
   at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3032)
   at android.app.ActivityThread.handleRelaunchActivity(ActivityThread.java:4921)
   at android.app.ActivityThread.-wrap19(Unknown Source)
   at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1702)
   at android.os.Handler.dispatchMessage(Handler.java:105)
   at android.os.Looper.loop(Looper.java:164)
   at android.app.ActivityThread.main(ActivityThread.java:6944)
   at java.lang.reflect.Method.invoke(Method.java)
   at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:327)
   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1374)

如评论中所述,下面显示了其他日志,该日志显示它发生在MainActivity的onCreate中,但没有特定的方向,只是在Android 7上一次在三星设备上发生,而在Android 8上一次在三星设备上发生过

Caused by java.lang.IllegalStateException: No instantiated fragment for index #0
   at android.support.v4.app.FragmentManagerImpl.restoreAllState(FragmentManager.java:3097)
   at android.support.v4.app.FragmentController.restoreAllState(FragmentController.java:149)
   at android.support.v4.app.FragmentActivity.onCreate(FragmentActivity.java:306)
   at android.support.v7.app.AppCompatActivity.onCreate(AppCompatActivity.java:84)
   at me.com.mycompanydomain.ui.activities.NavDrawerActivity.onCreate(NavDrawerActivity.java:138)
   at me.com.mycompanydomain.ui.activities.MainActivity.onCreate(MainActivity.java:180)
   at android.app.Activity.performCreate(Activity.java:6955)
   at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1126)
   at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2927)
   at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3045)
   at android.app.ActivityThread.handleRelaunchActivity(ActivityThread.java:4978)
   at android.app.ActivityThread.-wrap21(ActivityThread.java)
   at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1648)
   at android.os.Handler.dispatchMessage(Handler.java:102)
   at android.os.Looper.loop(Looper.java:154)
   at android.app.ActivityThread.main(ActivityThread.java:6776)
   at java.lang.reflect.Method.invoke(Method.java)
   at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1496)
   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1386)

编辑(片段操作详细信息)

MainActivity正在loadCurrentFragment();内部呼叫onCreate

 private void loadCurrentFragment() {
    mCurrentFragment = getSupportFragmentManager().findFragmentByTag(CURRENT_FRAGMENT_TAG);
    if (mCurrentFragment == null) {
        if(mAppState.getActiveNewsArticle() != null) {
            mCurrentFragment = new NewsArticleFragment();
            changeFrag();
        }
        else if (mAppState.getActiveChannel() != null) {
            mCurrentFragment = new ChannelFragment();
            changeFrag();
        }

    }
}

 private void changeFrag() {
    if (mCurrentFragment != null && !isFinishing()) {
        getSupportFragmentManager().beginTransaction()
                .replace(R.id.frag_container, mCurrentFragment, CURRENT_FRAGMENT_TAG)
                .disallowAddToBackStack()
                .commitAllowingStateLoss();
    }
}

还在onResume内使用以下代码

if (mAppState.getActiveNewsArticle() != null && !(mCurrentFragment instanceof NewsArticleFragment)) {
        mCurrentFragment = new NewsArticleFragment();
        changeFrag();
    }
    else if (mAppState.getActiveChannel() != null && !(mCurrentFragment instanceof ChannelFragment)) {
        mCurrentFragment = new ChannelFragment();
        changeFrag();
    }

在这些位置旁边,有一些EventBus方法onEventMainThread可以检查当前片段是否不是所需的操作,然后用所需的方法加载当前片段。片段不会被删除,只会被替换,而上面提到的每个加载的片段也具有嵌套片段。

0 个答案:

没有答案