2017-02-23 4 views
4

Ich habe einen Absturz auf Tablette, die ziemlich mysteriös für mich ist:Absturz auf Entfernen Fragmente

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) 

Es kommt nur auf meiner api 24 Pixel C. Debug-Modus mir nicht, wo, um herauszufinden, helfen könnte. Es passiert, wenn ich einen Knopf klicke, der ein Fragment entfernt, aber der "Fragmententfernungs" -Teil des Codes wird korrekt ausgeführt, etwas passiert nach der Ausführung meines OnClickListener.

Ich entfernte Transaktionsanimationen und bekam den gleichen Absturz.

Hat jemand das schon mal erlebt?

Dank

+0

Sie können Ihre Code-Verarbeitung "Fragment entfernen"? –

+1

@ RoShanShan Es war in der Tat die Art und Weise, dass ich das Fragment entfernt habe, habe ich meinen ursprünglichen Beitrag mit der Lösung aktualisiert –

Antwort

0

Es scheint, dass die Lösung eine Referenz des Fragments nicht zu halten war, aber es mit dem Tag finden:

Vorher:

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

dann, es zu entfernen:

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

Und jetzt:

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

dann:

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

Fragment sollte für null vor dem Entfernen von der Transaktion überprüft werden. Ich hatte das gleiche Problem, als ich versuchte, ein Fragment zu entfernen, das null war. Sie können Details sehen here