android - ViewHolder inflating layout on even and odd position -
i need 2 layout inflate on basis of , odd position of listview items using viewholder. @ position need different layout , @ odd position 1 having same elements different layout. implemented it, however, gives me random layouts @ different positions irrespective of position. needs done resolve it. thanks.
public simpleadapter(arraylist<wishlistdata> wishdatalist, context context, listview swipelistview) { super(context, android.r.layout.simple_list_item_1, wishdatalist); notifydatasetchanged(); simpleadapter.wishlistdata = wishdatalist; this.swipelistview = swipelistview; mpreferences = new preferences(context); screen_width = mpreferences.getscreenwidth(); screen_height = mpreferences.getscreenheight(); mfunctions = new userfunctions(); this.context = context; imageloader1 = new imageloader1(context); userimageloader = new userimageloader(context); } @override public view getview(final int position, view convertview, viewgroup parent) { viewholder viewholder = null; view row = convertview; if (row == null) { layoutinflater inflater = ((activity) context).getlayoutinflater(); system.out.println("position "+ position); if ((position % 2) == 0) { row = inflater.inflate(r.layout.single_wish_view_right, parent, false); } else if ((position % 2) == 1){ row = inflater .inflate(r.layout.single_wish_view, parent, false); } viewholder = new viewholder(); viewholder.back = (linearlayout) row .findviewbyid(r.id.back); viewholder.lenear = (linearlayout) row .findviewbyid(r.id.linear); viewholder.front = (relativelayout) row .findviewbyid(r.id.front); viewholder.likebutton = (imagebutton) row .findviewbyid(r.id.likemain); viewholder.deathwish = (textview) row .findviewbyid(r.id.death_wish); viewholder.time = (textview) row .findviewbyid(r.id.time_wish); viewholder.name = (textview) row.findviewbyid(r.id.name1); viewholder.commentbutton = (imagebutton) row .findviewbyid(r.id.comment); viewholder.sharebutton = (imagebutton) row .findviewbyid(r.id.sharemain); viewholder.helpbutton = (imagebutton) row .findviewbyid(r.id.help); viewholder.profilepic = (imageview) row .findviewbyid(r.id.profile_image); viewholder.likecount = (textview) row .findviewbyid(r.id.likecountadapter); commentcount = (textview) row .findviewbyid(r.id.commentcountadapter); viewholder.tagimg = (imageview) row .findviewbyid(r.id.tag_arrow); viewholder.image1 = (imageview) row .findviewbyid(r.id.image1); viewholder.image2 = (imageview) row .findviewbyid(r.id.image2); row.settag(viewholder); } else { viewholder = (viewholder) row.gettag(); } mwishesdata = wishlistdata.get(position); viewholder.wishlikecount = mwishesdata.getdeathwishlike(); if ((position % 4) == 0) { viewholder.lenear.setbackgroundcolor(color.rgb(255, 168, 0)); viewholder.back.setbackgroundresource(r.drawable.a2bg); viewholder.tagimg.setbackgroundresource(r.drawable.a11); viewholder.front.setbackgroundcolor(color.rgb(255, 168, 0)); } else if ((position % 4) == 1) { viewholder.lenear.setbackgroundcolor(color.rgb(253, 81, 43)); viewholder.back.setbackgroundresource(r.drawable.a3bg); viewholder.tagimg.setbackgroundresource(r.drawable.a21); viewholder.front.setbackgroundcolor(color.rgb(253, 81, 43)); // viewholder.adlayout.invalidate(); // viewholder.adlayout.setvisibility(view.gone); } else if ((position % 4) == 2) { viewholder.lenear.setbackgroundcolor(color.rgb(155, 89, 182)); viewholder.back.setbackgroundresource(r.drawable.a4bg); viewholder.tagimg.setbackgroundresource(r.drawable.a31); viewholder.front.setbackgroundcolor(color.rgb(155, 89, 182)); } else if ((position % 4) == 3) { viewholder.lenear.setbackgroundcolor(color.rgb(46, 204, 113)); viewholder.back.setbackgroundresource(r.drawable.a1bg); viewholder.tagimg.setbackgroundresource(r.drawable.a41); viewholder.front.setbackgroundcolor(color.rgb(46, 204, 113)); }
view holder :
public static class viewholder { public int wishlikecount; public int wishcommentcount; linearlayout back, lenear; relativelayout front; textview deathwish; imagebutton likebutton, commentbutton, sharebutton, helpbutton; textview time, name, likecount; imageview tagimg, image1, image2, profilepic; }
the problem when views recycled, listview can give "right" layout when expected "left" layout. should override getitemviewtype()
, getviewtypecount()
in adapter implementation; these methods ensure listview gives appropriate view type when provides recycled view getview()
@override public int getviewtypecount() { // homecoming total number of view types. value should never alter @ runtime homecoming 2; } @override public int getitemviewtype(int position) { // homecoming value between 0 , (getviewtypecount - 1) homecoming position % 2; } @override public view getview(int position, view convertview, viewgroup container) { int layoutresource; // determined view type int viewtype = getitemviewtype(position); switch(viewtype) { case 0: layoutresource = r.layout.list_item_even; break; case 1: layoutresource = r.layout.list_item_odd; break; } viewholder holder; if (convertview != null) { holder = (viewholder) convertview.gettag(); } else { convertview = inflater.inflate(layoutresource, container, false); holder = new viewholder(); ... convertview.settag(holder); } ... homecoming convertview; }
android android-listview android-viewholder
No comments:
Post a Comment