android - Why is my custom object not persisted by onSaveInstanceState and onRestoreInstanceState -
when activity gets called first time, called in intent. received , stored in data member:
class editblindscheduleactivity extends activity { private blindschedule blindschedule; protected void oncreate(bundle savedinstancestate) { ... if (savedinstancestate == null) { // not recreating, first load. blindschedule = (blindschedule) getintent().getserializableextra("blindschedule"); }
there simple if/else determine if have blindschedule
object or not.
if (blindschedule == null) { settitle("create blind schedule"); } else { settitle("edit blind schedule"); }
when load activity first time, indeed, title "edit blind schedule", meaning there blindschedule object.
unfortunately, when rotate screen twice title reads "create blind schedule", meaning blindschedule object null , has failed persisted.
why blindschedule object not being persisted, , can it?
full code follows:
public class editblindscheduleactivity extends activity { private blindschedule blindschedule; boolean creating; // creating or updating? @override protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_edit_blind_schedule); if (savedinstancestate == null) { // not recreating, first load. blindschedule = (blindschedule) getintent().getserializableextra("blindschedule"); } if (blindschedule == null) { creating = true; settitle("create blind schedule"); } else { creating = false; settitle("edit blind schedule"); } } @override protected void onrestoreinstancestate(bundle savedinstancestate) { super.onrestoreinstancestate(savedinstancestate); blindschedule = (blindschedule) savedinstancestate.getserializable("blindschedule"); } @override protected void onsaveinstancestate(bundle outstate) { super.onsaveinstancestate(outstate); outstate.putserializable("blindschedule", blindschedule); }
you need retrieve saved custom object in oncreate
in case.
according official documentation
onrestoreinstancestate
called after onstart
time settitle
has been called.
add else part if (savedinstancestate == null)
, retrieve blindschedule
in there same way getintent
if (savedinstancestate == null) { // not recreating, first load. blindschedule = (blindschedule) getintent().getserializableextra("blindschedule"); } else { blindschedule = (blindschedule) savedinstancestate.getserializableextra("blindschedule"); }
Comments
Post a Comment