2017-02-23 111 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