2017-02-23 114 views
4

我对平板电脑崩溃那是相当misterious对我说:我的API崩溃的删除片段

java.lang.NullPointerException: Attempt to read from field 'int android.support.v4.app.Fragment.mContainerId' on a null object reference                   
    at android.support.v4.app.FragmentTransition.addToFirstInLastOut(FragmentTransition.java:1012)                   
    at android.support.v4.app.FragmentTransition.calculateFragments(FragmentTransition.java:971)                   
    at android.support.v4.app.FragmentTransition.startTransitions(FragmentTransition.java:95)                   
    at android.support.v4.app.FragmentManagerImpl.executeOpsTogether(FragmentManager.java:2143)                   
    at android.support.v4.app.FragmentManagerImpl.optimizeAndExecuteOps(FragmentManager.java:2098)                   
    at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:2008)                   
    at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:710)                   
    at android.os.Handler.handleCallback(Handler.java:751)                   
    at android.os.Handler.dispatchMessage(Handler.java:95)                   
    at android.os.Looper.loop(Looper.java:154)                   
    at android.app.ActivityThread.main(ActivityThread.java:6077)                   
    at java.lang.reflect.Method.invoke(Native Method)                   
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:865)                   
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:755) 

它只发生24像素C.调试模式不能帮我找出。它发生在我点击一个删除一个片段的按钮时,但是“片段删除”部分代码得到正确执行,在我的OnClickListener执行后发生了一些事情。

我删除了事务动画并得到了相同的崩溃。

有没有人遇到过?

感谢

+0

你可以发布你的代码处理“去除片段”? –

+1

@RoShanShan这确实是我删除片段的方式,我用解决方案更新了原始帖子 –

回答

0

似乎是解决不保留片段的引用,但与标签找到它:

前:

FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); 
courseLauncherFragment = CourseLauncherFragment.newInstance(courseId); 
fragmentTransaction.replace(R.id.launcher_finish_frame_layout, courseLauncherFragment); 
fragmentTransaction.commit(); 
getSupportFragmentManager().executePendingTransactions(); 

然后将其删除:

FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); 
fragmentTransaction.setCustomAnimations(R.anim.slide_in_left, R.anim.slide_out_left); 
fragmentTransaction.remove(courseLauncherFragment); 
fragmentTransaction.commit(); 

现在:

FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); 
fragmentTransaction.replace(R.id.launcher_finish_frame_layout, CourseLauncherFragment.newInstance(courseId), LAUNCHER_FRAGMENT_TAG); 
fragmentTransaction.commit(); 
getSupportFragmentManager().executePendingTransactions(); 

则:

FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); 
fragmentTransaction.setCustomAnimations(R.anim.slide_in_left, R.anim.slide_out_left); 
Fragment fragment = fragmentManager.findFragmentByTag(LAUNCHER_FRAGMENT_TAG); 
fragmentTransaction.remove(fragment); 
fragmentTransaction.commit(); 
0

片段应null通过交易去除前进行检查。试图删除null的片段时遇到同样的问题。你可以看到细节here