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

Popular posts from this blog

javascript - mongodb won't find my schema method in nested container -

Hibernate criteria by a list of natural ids -

ios - Lagging ScrollView with UIWebview inside -