android - list view image is getting changed when scrolling -
i parsing json data in listview(imageview , textview).for first four items of listview image , textview correctly added when scroll listview images in imageview getting changed. here code..
adapter.java
public class adapter extends baseadapter { private static final string tag = "adapter"; private activity mactivity; public arraylist<data> mobjects; context context; static class viewholder { static imageview icon; textview title; textview name; textview review; downloadimagetask mtask; string ab[]; // downloadimagetask1 mtask1; // imageview photo; } public adapter(activity activity, context context, arraylist<data> mobjects) { this.mactivity = (activity) activity; this.context = context; this.mobjects = mobjects; } public void setobjects(arraylist<data> mobjects) { this.mobjects = mobjects; } @override public view getview(final int position, view convertview, viewgroup parent) { final data item = mobjects.get(position); view rowview = convertview; viewholder viewholder; if (rowview == null) { layoutinflater inflater = mactivity.getlayoutinflater(); rowview = inflater.inflate(r.layout.item, parent, false); viewholder = new viewholder(); viewholder.icon = (imageview) rowview.findviewbyid(r.id.image); // viewholder.photo = (imageview) rowview.findviewbyid(r.id.photo); viewholder.title = (textview) rowview.findviewbyid(r.id.title); viewholder.name = (textview) rowview.findviewbyid(r.id.name); viewholder.review = (textview) rowview.findviewbyid(r.id.status); rowview.settag(viewholder); } viewholder holder = (viewholder) rowview.gettag(); holder.icon.settag(position); holder.title.settext(item.getmtitle()); // holder.name.settag(position); holder.name.settext(item.getmconcatinate()); holder.review.settext(item.getmreview()); holder.icon.setbackgroundresource(r.drawable.ic_ab); holder.mtask = new downloadimagetask(item.getmimageurl(), holder.icon); if (!holder.mtask.iscancelled()) { holder.mtask.execute(); } viewholder.icon.settag(position); // }// update position because list view recycle viewholder.icon.setonclicklistener(new onclicklistener() { @override public void onclick(view v) { log.d("parsing json data", "before user try122222"); // perform // object tag= v.gettag(); log.d("parsing json data", "abc"); int clickedposition = (integer) v.gettag(); data clickeditem = mobjects.get(clickedposition); // object vi=row.gettag(); string title = clickeditem.getmconcatinate(); string picture = clickeditem.getmimageurl(); intent intent = new intent(v.getcontext(), largeview.class); log.d("parsing json data", "before user try444444"); intent.putextra("data", title); intent.putextra("image3", picture); v.getcontext().startactivity(intent); log.d("parsing json data", "before user try7777"); } }); return rowview; } @override public int getcount() { return (this.mobjects.size()); } @override public object getitem(int position) { return (this.mobjects.get(position)); } @override public long getitemid(int position) { return (position); } public abslistview.recyclerlistener mrecyclerlistener = new recyclerlistener() { public void onmovedtoscrapheap(view view) { viewholder viewholder = (viewholder) view.gettag(); downloadimagetask imagetask = viewholder.mtask; if (imagetask != null) { imagetask.cancel(true); } } }; }
main.java
@override protected void oncreate(bundle savedinstancestate) { strictmode.threadpolicy policy = new strictmode.threadpolicy.builder() .detectall().penaltylog().build(); strictmode.setthreadpolicy(policy); super.oncreate(savedinstancestate); setcontentview(r.layout.activity_profile3); name = (textview) findviewbyid(r.id.textview1); bmimage2 = (imageview) findviewbyid(r.id.imageview1); address = (textview) findviewbyid(r.id.textview2); gender = (textview) findviewbyid(r.id.textview3); loyalitypoints = (textview) findviewbyid(r.id.textview7); followers = (textview) findviewbyid(r.id.textview8); following = (textview) findviewbyid(r.id.textview9); // list13 = new arraylist<hashmap<string, object>>(); mlistview = (listview) findviewbyid(android.r.id.list); mlistview.setclickable(true); // mlistview=(listview)findviewbyid(r.id.list); madapter = new adapter(this,c,msource ); mlistview.setadapter(madapter); log.w("parsing json data", "before item click"); mlistview.setrecyclerlistener(madapter.mrecyclerlistener); }
first of have made imageview reference static in viewholder. should not that, because every getview overwrite , have each view's viewholder referencing 1 imageview. secod, should bear in mind listview recycling views, if started loading image 1 view , scrolled it, moment image loaded same view may represent list view item. overall displaying bitmaps in listview efficiently complex task involves quite lot of variables. suggest reading this , downloading code example provide. excellent starting point , in simple cases may enough copy-pasted.
Comments
Post a Comment