android - using viewHolder Interface to update state to Listview -
in code below in else section has gettag() inside of arrayadapter
holder = (viewholder) convertview.gettag();
how use section update or latest state of view item , keep state consistent saved state is. if click checkbox or checked state of checkbox database , want displayed in correct state of checkbox?
in app getting previous state of checkbox database , setting checkbox state when listview created, , if state of box changed change in state saved database , checkbox show change in state.
in other words supposed put in section of code, besides gettag line?
if ((convertview == null)){ layoutinflater inflater = (layoutinflater) context.getsystemservice(context.layout_inflater_service); convertview = inflater.inflate(r.layout.smalltank_customer_row, null); holder = new viewholder(); holder.textviewone = (textview) convertview.findviewbyid(r.id.textview1); holder.textviewtwo = (textview) convertview.findviewbyid(r.id.textview2); holder.textviewthree = (textview) convertview.findviewbyid(r.id.textview3); holder.radiogroupone = (radiogroup) convertview.findviewbyid(r.id.radiogroup1); holder.radiobuttonone = (radiobutton) convertview.findviewbyid(r.id.radiobutton1); holder.radiobuttontwo = (radiobutton) convertview.findviewbyid(r.id.radiobutton2); holder.checkboxone = (checkbox) convertview.findviewbyid(r.id.checkbox1); holder.buttonone = (button) convertview.findviewbyid(r.id.button1); holder.buttontwo = (button) convertview.findviewbyid(r.id.button2); holder.buttonthree = (button) convertview.findviewbyid(r.id.button3); holder.buttonfour = (button) convertview.findviewbyid(r.id.button4); convertview.settag(holder); }else{ holder = (viewholder) convertview.gettag(); }
since convertview can recycled , volatile, extension viewholder equally volatile, shouldn't store persistent data such checkbox selections there. should store checkbox selection values somewhere persisted when activity paused , resumed.
as example, used hashset in 1 o app hold contacts user has selected saved , restored when activity paused , resumed, sample code:
private hashset<contactdata> selset = new hashset<contactdata>(); public view getview(int position, view convertview, viewgroup parent) { if ((convertview == null)){ layoutinflater inflater = (layoutinflater) context.getsystemservice(context.layout_inflater_service); convertview = inflater.inflate(r.layout.smalltank_customer_row, null); holder = new viewholder(); //init holder convertview.settag(holder); }else{ holder = (viewholder) convertview.gettag(); } holder.status.setchecked(selset.contains(data)); return convertview; } public void onclick(view v) { userholder holder = (userholder) v.gettag(); if (selset.contains(holder.user)) { selset.remove(holder.user); } else { selset.add(holder.user); } } public final void oncreate(bundle savedinstancestate) { if (savedinstancestate != null) { selset = (hashset<contactdata>) savedinstancestate .getserializable("selset"); } } @override public void onsaveinstancestate(bundle outstate) { super.onsaveinstancestate(outstate); outstate.putserializable("selset", selset); }
Comments
Post a Comment