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

Popular posts from this blog

php - mySql Join with 4 tables -

css - Text drops down with smaller window -

c# - DetailsView in ASP.Net - How to add another column on the side/add a control in each row? -