android - FragmentManager NullPointerException when trying to commitAllowingStateLoss -
android - FragmentManager NullPointerException when trying to commitAllowingStateLoss -
context: have activity fragment , 3 innerfragments. when fragment ondestroy() called, want remove inner fragments fragmentmanager. code ondestroy() below.
problem: fragmentmanager throws nullpointerexception, when commitallowingstateloss() called. don't understand why.
@override public void ondestroy() { super.ondestroy(); if (getfragmentmanager().findfragmentbyid(r.id.fragment_framelayout_left) != null) { fragmenttransaction fragmenttransaction = getfragmentmanager().begintransaction(); fragmenttransaction.remove(mleftfragment); fragmenttransaction.commitallowingstateloss(); } } stack trace:
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): @ android.support.v4.app.fragmentmanagerimpl.execpendingactions(fragmentmanager.java:1419) 02-11 12:15:14.162: e/androidruntime(25911): @ android.support.v4.app.fragmentmanagerimpl$1.run(fragmentmanager.java:429) 02-11 12:15:14.162: e/androidruntime(25911): @ android.os.handler.handlecallback(handler.java:725) 02-11 12:15:14.162: e/androidruntime(25911): @ android.os.handler.dispatchmessage(handler.java:92) 02-11 12:15:14.162: e/androidruntime(25911): @ android.os.looper.loop(looper.java:137) 02-11 12:15:14.162: e/androidruntime(25911): @ android.app.activitythread.main(activitythread.java:5039) 02-11 12:15:14.162: e/androidruntime(25911): @ java.lang.reflect.method.invokenative(native method) 02-11 12:15:14.162: e/androidruntime(25911): @ java.lang.reflect.method.invoke(method.java:511) 02-11 12:15:14.162: e/androidruntime(25911): @ com.android.internal.os.zygoteinit$methodandargscaller.run(zygoteinit.java:793) 02-11 12:15:14.162: e/androidruntime(25911): @ com.android.internal.os.zygoteinit.main(zygoteinit.java:560) 02-11 12:15:14.162: e/androidruntime(25911): @ dalvik.system.nativestart.main(native method)
the fragmentmanager manages fragments @ activity level, , lifecycle tied parent activity. kid fragment manager manages fragments @ fragment level, , lifecycle tied parent fragment.
so phone architecture, add together innerfragment activity using getfragmentmanager(). when activity destroys (via button / finish()), fragmentmanager destroy , release innerfragment you.
for tablet architecture, add together innerfragments fragment using getchildfragmentmanager() (in latest back upwards library). when fragment destroys good, fragmentmanager destroy , release innerfragments you.
you should not have manage releasing , destroying fragments yourself. i'd recommend logging lifecycle events of activities , fragments can watch them go through states , ensure right behavior.
android android-fragments android-fragmentactivity
Comments
Post a Comment