Kontext commitAllowingStateLoss versuchen: Ich habe eine Activity
mit einem Fragment
und 3 InnerFragments
. Wenn die Fragment
onDestroy()
aufgerufen wird, möchte ich die inneren Fragmente aus der FragmentManager
entfernen. Der Code von onDestroy()
ist unten.FragmentManager Nullpointer wenn
Problem:FragmentManager
wirft NullPointerException
, wahrscheinlich, wenn commitAllowingStateLoss()
genannt wird. Ich verstehe nicht warum.
@Override
public void onDestroy()
{
super.onDestroy();
if (getFragmentManager().findFragmentById(R.id.fragment_framelayout_left) != null)
{
FragmentTransaction fragmentTransaction = getFragmentManager().beginTransaction();
fragmentTransaction.remove(mLeftFragment);
fragmentTransaction.commitAllowingStateLoss();
}
}
Stapelüberwachung:
02-11 12:15:14.162: E/AndroidRuntime(25911): FATAL EXCEPTION: main
02-11 12:15:14.162: E/AndroidRuntime(25911): java.lang.NullPointerException
02-11 12:15:14.162: E/AndroidRuntime(25911): at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1419)
02-11 12:15:14.162: E/AndroidRuntime(25911): at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:429)
02-11 12:15:14.162: E/AndroidRuntime(25911): at android.os.Handler.handleCallback(Handler.java:725)
02-11 12:15:14.162: E/AndroidRuntime(25911): at android.os.Handler.dispatchMessage(Handler.java:92)
02-11 12:15:14.162: E/AndroidRuntime(25911): at android.os.Looper.loop(Looper.java:137)
02-11 12:15:14.162: E/AndroidRuntime(25911): at android.app.ActivityThread.main(ActivityThread.java:5039)
02-11 12:15:14.162: E/AndroidRuntime(25911): at java.lang.reflect.Method.invokeNative(Native Method)
02-11 12:15:14.162: E/AndroidRuntime(25911): at java.lang.reflect.Method.invoke(Method.java:511)
02-11 12:15:14.162: E/AndroidRuntime(25911): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
02-11 12:15:14.162: E/AndroidRuntime(25911): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
02-11 12:15:14.162: E/AndroidRuntime(25911): at dalvik.system.NativeStart.main(Native Method)
Ich bin nicht ganz nach Ihrer Architektur. Leben die 'InnerFragments' im' Fragment'? Wenn dem so ist, würde ich denken, dass Sie 'getChildFragmentManager()' haben sollten, um sie zu verwalten (nicht den 'FragmentManager' von' Activity'). Auf diese Weise, wenn das 'Fragment' zerstört, werden auch seine 'InnerFragments'-Kinder ohne diesen zusätzlichen Code zerstört. –
Ja, die Inneren Fragmente leben innerhalb des Fragments (zumindest auf Tablets). Auf Telefonen leben sie in einer Aktivität (InnerFragment1 in Activity1, InnerFragment2 in Activity2). Deshalb habe ich diesen Code benutzt. Würde es auch mit getChildFragmentManager() in Activities funktionieren? LE: Dumme Frage, tut mir leid. Ich werde deine Idee in ein paar Stunden versuchen und sehen, wie es geht. –
'getChildFragmentManager()' ist nur in 'Fragments', da 'Aktivitäten' nicht auf Children' FragmentManagers' zugreifen kann. "Fragmente" können jedoch 'getFragmentManager()' aufrufen und auf den ParentManager 'ParentManager' ihrer übergeordneten 'Activity' zugreifen, so dass sie neue' Fragments 'auf sich selbst starten können, ohne ihre übergeordnete 'Activity' zu benötigen. –