android - Set List row Background based on position in Custom Adapter -
i have a custom adapter used build list. in adapter want first,second , third row show specific colours individual backgrounds,to achieve using below code. seems backgrounds being copied rows not (0,1,2). seems row below bottom row treated row (0) , on , backgounds. how solve this:
public class topfragmentadapter extends baseadapter { private activity activity; private arraylist<hashmap<string, string>> data; private static layoutinflater inflater=null; public imageloader imageloader; public topfragmentadapter (activity a, arraylist<hashmap<string, string>> d) { activity = a; data=d; inflater = (layoutinflater)activity.getsystemservice(context.layout_inflater_service); imageloader=new imageloader(activity.getapplicationcontext()); } public int getcount() { return data.size(); } public object getitem(int position) { return data.get(position); } public long getitemid(int position) { return position; } public static class viewholder { textview name; textview track; textview number; imageview thumb; } public view getview(int position, view convertview, viewgroup parent) { viewholder holder; view vi=convertview; if(convertview==null){ vi = inflater.inflate(r.layout.layout_bnmtoptenlistrow, null); holder = new viewholder(); holder.name = (textview)vi.findviewbyid(r.id.topten_artist_name); holder.track = (textview)vi.findviewbyid(r.id.topten_album_name); holder.number= (textview)vi.findviewbyid(r.id.topten_number); holder.thumb=(imageview)vi.findviewbyid(r.id.topten_list_image); vi.settag(holder); } else { holder = (viewholder) vi.gettag(); } hashmap<string, string> hash = new hashmap<string, string>(); hash = data.get(position); holder.name.settext("artist: "+hash.get(toplistfragment.key_name)); holder.track.settext("track: "+hash.get(toplistfragment.key_track_name)); holder.number.settext(hash.get(toplistfragment.key_number)+" listens"); imageloader.displayimage(hash.get(toplistfragment.key_image_url), holder.thumb); setrowcolour(vi,position); return vi; } private void setrowcolour(view view,int position){ if( position==0){ view.setbackgroundresource(r.drawable.gold_gradient); } else if( position==1){ view.setbackgroundresource(r.drawable.silver_gradient); } else if( position==2){ view.setbackgroundresource(r.drawable.bronze_gradient); } }
}
in situation had assign position underlying data , use alternate colors. (the position in view relative position of object, which, found out, bit variable depending on things how fast scroll view.)
i created own object , used arraylist of object , initializing object assigned position (basically offset). did modulo math on object position.
translist tl = entries.get(position); // translist own object, entries array list of objects int position = tl.getposition(); if ( (position % 3) == 0 ) { } else if ( (position % 3) == 1 ) { } else if ( (position % 3) == 2 ) { }
Comments
Post a Comment