Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/185.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android ChildFragmentManager.getFragment()和NullPointerException_Android_Android Fragments_Android Fragmentactivity - Fatal编程技术网

Android ChildFragmentManager.getFragment()和NullPointerException

Android ChildFragmentManager.getFragment()和NullPointerException,android,android-fragments,android-fragmentactivity,Android,Android Fragments,Android Fragmentactivity,我有一个父片段承载一个子片段。 我对我的应用程序进行压力测试,通过在开发者选项中勾选“不保留活动”,然后按下Home按钮,强制将其关闭 我可以看到调用父片段的onSaveInstanceState,函数的代码是: if (mDetailFragment!=null){ getChildFragmentManager().putFragment(outState,FRAGMENT_ROUTE,mDetailFragment); } 然后,当我恢复应用程序时,看到父片段的onCreate被

我有一个父片段承载一个子片段。 我对我的应用程序进行压力测试,通过在开发者选项中勾选“不保留活动”,然后按下Home按钮,强制将其关闭

我可以看到调用父片段的
onSaveInstanceState
,函数的代码是:

if (mDetailFragment!=null){
    getChildFragmentManager().putFragment(outState,FRAGMENT_ROUTE,mDetailFragment);
}
然后,当我恢复应用程序时,看到父片段的
onCreate
被非null和非空的savedInstanceState调用,我可以看到包含索引片段的bundle\u路由。但是,当我调用
getFragment
时,它总是崩溃。代码如下:

if (savedInstanceState == null) {
    mDetailFragment = new RouteFragment();
    fragmentManager.beginTransaction().replace(R.id.v4_fragment_route, mDetailFragment).commit();
} else {
    //first try to find the fragment in a normal way
    mDetailFragment = (RouteFragment) fragmentManager.findFragmentById(R.id.v4_fragment_route);
    //if cannot, then use getFragment
    if (mDetailFragment== null){
        mDetailFragment = (RouteFragment) fragmentManager.getFragment(savedInstanceState,FRAGMENT_ROUTE);
    }
}
崩溃日志如下所示,看起来索引列表是空的。我错过了什么?谢谢

Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'int java.util.ArrayList.size()' on a null object reference
            at android.support.v4.app.FragmentManagerImpl.getFragment(FragmentManager.java:583)
            at com.myapp.android.appname.fragment.HomeFragment.onCreate(HomeFragment.java:170)
            at android.support.v4.app.Fragment.performCreate(Fragment.java:1764)
            at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:915)
            at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1127)
            at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1109)
            at android.support.v4.app.FragmentManagerImpl.dispatchCreate(FragmentManager.java:1913)
            at android.support.v4.app.FragmentActivity.onCreate(FragmentActivity.java:267)
            at android.support.v7.app.ActionBarActivity.onCreate(ActionBarActivity.java:123)
            at com.buzzhives.android.tripplanner.ProgressEnabledActivity.onCreate(ProgressEnabledActivity.java:25)
            at com.buzzhives.android.tripplanner.MainActivity.onCreate(MainActivity.java:73)
            at android.app.Activity.performCreate(Activity.java:5934)
            at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1106)
            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2251)
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2360)
            at android.app.ActivityThread.access$800(ActivityThread.java:144)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1279)
            at android.os.Handler.dispatchMessage(Handler.java:102)
            at android.os.Looper.loop(Looper.java:137)
            at android.app.ActivityThread.main(ActivityThread.java:5223)
            at java.lang.reflect.Method.invoke(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:372)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)

片段(无片段)尚未创建。在任何片段存在或崩溃之前,不能调用getFragment。它可能不应该(应该返回null),但这是一个bug。

我没有说清楚,只是更新了代码。调用onCreate()时,我会检查它是新状态还是还原状态。上面更新的代码我正在查看aosp代码。该行正在访问活动片段的数组列表。它为null,因为还没有激活的片段。当第一个片段变为active时,将创建该列表。您是否已解决该问题?