android - Creating fragment by external event == possible IllegalStateException? -
let's imagine have activity registers broadcastreceiver hear event independent activity's lifecycle. receiver can registered on activity's onstart/onstop or onresume/onpause. when event received, want create , show fragment, illustration show event details. works, app crashes "illegalstateexception: can not perform action after onsaveinstancestate".
i think, may comes when activity going pause , stop state, saved internal state, broadcastreceiver not unregistered, , @ moment comes new external event.
fragment manager saves it's state on onsaveinstancestate(). according official documentation, "if called, onsaveinstancestate() occur before onstop(). there no guarantees whether occur before or after onpause()". so, registered receiver on onresume() , unregistering on onpause(), there no guarantees avoid illegalstateexception because activity can save it's internal state before onpause().
maybe, possible solution override onsaveinstancestate() , set here own boolean flag mstatesaved. and, when new event received, analyze flag: if set, assume activity going pause-stop state, , not start fragment transaction.
i'm interesting, maybe there improve solution.
thank attention!
updated (code example, fragment):
@override protected void onstart() { super.onstart(); mactioninformer.addobserver( onactioninformerupdated ); } @override protected void onstop() { super.onstop(); mactioninformer.deleteobserver( onactioninformerupdated ); } observer onactioninformerupdated = new observer() { @override public void update( observable observable, object info ) { taskevent event = (taskevent) data; if( event == taskevent.start ) { setsupportprogressbarindeterminatevisibility( true ); } else { setsupportprogressbarindeterminatevisibility( false ); // update actionbar invalidateoptionsmenu(); // handle authorisation event if( event == taskevent.auth ) { string msg = mactioninformer.getextramessage(); dialogfragment dlg = authorisationdialog.newinstance( msg ); dlg.show( getfragmentmanager(), "authorisation" ); } } } };
android fragment illegalstateexception
No comments:
Post a Comment