java - BaseAdapter in ListActivity isn't displaying the correct items -
i have listactivity
in trying display imageview
under list. i'm attempting creating own baseadapter
, using 2 different methods inside getview
method, 1 list , 1 imageview
. managed imageview
displayed under list how want it, problem having list isn't displayed correctly.
for reason item in list isn't on screen until user scrolls down gets populated wrong data so:
----top screen------ | item 1 | | item 2 | | item 3 | | item 4 | ----bottom screen--- | item 1 | <--items not on screen show | item 1 | <--as item 1 once user scrolls | image view |
what should so:
----top screen------ | item 1 | | item 2 | | item 3 | | item 4 | ----bottom screen--- | item 5 | | item 6 | | image view |
my custom baseadapter
private class mycustomadapter extends baseadapter { private static final int type_item = 0; private static final int type_separator = 1; private static final int type_max_count = type_separator + 1; private arraylist<hashmap<string,string>> mdata = new arraylist<hashmap<string,string>>(); private layoutinflater minflater; private treeset mseparatorsset = new treeset(); public mycustomadapter() { minflater = (layoutinflater)getsystemservice(context.layout_inflater_service); } public void additem(final string header, final string message) { hashmap<string,string> item = new hashmap<string,string>(); item.put(line_1, header); item.put(line_2, message); mdata.add(item); notifydatasetchanged(); } public void addimageitem() { hashmap<string,string> item = new hashmap<string,string>(); item.put(line_1, ""); item.put(line_2, ""); mdata.add(item); mseparatorsset.add(mdata.size() - 1); notifydatasetchanged(); } @override public int getitemviewtype(int position) { return mseparatorsset.contains(position) ? type_separator : type_item; } @override public int getviewtypecount() { return type_max_count; } public int getcount() { return mdata.size(); } public object getitem(int position) { return mdata.get(position); } public long getitemid(int position) { return position; } public view getview(int position, view convertview, viewgroup parent) { viewholder vh = null; int type = getitemviewtype(position); system.out.println("getview " + position + " " + convertview + " type = " + type); if (convertview == null) { vh = new viewholder(); switch (type) { case type_item: convertview = minflater.inflate(r.layout.instructions_two_row, null); vh.header = (textview) convertview.findviewbyid(r.id.instructions_header); vh.message = (textview) convertview.findviewbyid(r.id.instructions_message); vh.header.settext((charsequence) mdata.get(position).get(line_1)); vh.message.settext((charsequence) mdata.get(position).get(line_2)); break; case type_separator: convertview = minflater.inflate(r.layout.instructions_image, null); vh.imageview = (imageview) convertview.findviewbyid(r.id.instuct_image); vh.imageview.setimagedrawable(getresources().getdrawable(r.drawable.instructions)); break; } convertview.settag(vh); } else { vh = (viewholder) convertview.gettag(); } return convertview; } } public static class viewholder { public textview header; public textview message; public imageview imageview; }
thanks all!
getview
recycles views scroll. if convertview not null, still need check correct type , set correct values on it.
Comments
Post a Comment