java - ListView showing incorrect data in views -
if scroll through listview 1 textview (expiresin) in listview item gets copied others randomly. i'm guessing has viewholder can't see i'm going wrong, , expiresin textview have problem with:
public class mysynclistadapter extends couchbaseviewlistadapter { protected mainactivity parent; private couchdbconnector db; private static final string tag = "mysynclistadapter"; public mysynclistadapter(mainactivity parent, couchdbconnector couchdbconnector, viewquery viewquery) { super(couchdbconnector, viewquery, true); this.parent = parent; this.db = couchdbconnector; log.d(tag, "in constructor"); } private static class viewholder { imageview img; textview label; textview dateadded; textview expiresin; } @override public view getview(int position, view itemview, viewgroup parent) { log.d(tag, "in getview"); view v = itemview; if (v == null) { layoutinflater vi = (layoutinflater)parent.getcontext().getsystemservice(context.layout_inflater_service); v = vi.inflate(r.layout.list_item, null); viewholder vh = new viewholder(); vh.label = (textview) v.findviewbyid(r.id.label); vh.img = (imageview) v.findviewbyid(r.id.img); vh.dateadded = (textview) v.findviewbyid(r.id.tvdateadded); vh.expiresin = (textview) v.findviewbyid(r.id.tvexpiresinlist); v.settag(vh); } textview label = ((viewholder)v.gettag()).label; textview dateadded = ((viewholder)v.gettag()).dateadded; textview expiresin = ((viewholder)v.gettag()).expiresin; imageview img = ((viewholder)v.gettag()).img; row row = getrow(position); jsonnode item = row.getvalueasnode(); jsonnode itemtext = item.get("header"); jsonnode dateaddedtext = item.get("dateadded"); jsonnode expirydatetext = item.get("expirydate"); jsonnode attachmenttext = item.get("_attachments"); viewholder holder = (viewholder) v.gettag(); if(label != null) { holder.label.settext(itemtext.gettextvalue()); } if(dateadded != null) { log.d(tag, "in dateadded getview"); if(comparedate.isdateaddedtoday(dateaddedtext.gettextvalue())){ holder.dateadded.settext(r.string.today); } else if (comparedate.isdateaddedyesterday(dateaddedtext.gettextvalue())){ holder.dateadded.settext(r.string.yesterday); } else{ string age = string.valueof(comparedate.getageindays(dateaddedtext.gettextvalue())); holder.dateadded.settext( age + " " + parent.getresources().getstring(r.string.days_ago)); } } if(!expirydatetext.isnull() && expiresin != null){ long nodays = comparedate.getdaysuntil(expirydatetext.gettextvalue()); if(nodays<6){ holder.expiresin.settextcolor(color.parsecolor("#ff4444")); } holder.expiresin.settext(string.valueof(nodays) + " " + parent.getresources().getstring(r.string.days_until_expiry)); } if(img != null){ //bitmap stuff holder.img.setimagebitmap(bitmap); } return v; } update solved adding else statement setting expiresin "". love explaination why if don't set it, uses item's textview.
if(!expirydatetext.isnull() && expiresin != null){ long nodays = comparedate.getdaysuntil(expirydatetext.gettextvalue()); if(nodays<6){ holder.expiresin.settextcolor(color.parsecolor("#ff4444")); } holder.expiresin.settext(string.valueof(nodays) + " " + parent.getresources().getstring(r.string.days_until_expiry)); } else { holder.expiresin.settext(""); }
Comments
Post a Comment