Android ListView with multiple select and custom adapter -
i have listview
custom adapter. listview
allows multiple select, somehow it's not recognising when item selected.
i've made adapter items extend checkable, still getcheckeditempositions()
returns array of falses.
i guess there's fundamental i'm doing wrong, have been unable far find examples of multiple select listviews adapter not arrayadapter using default layout multiple selects.
any appreciated.
code below:
main class:
listview = (listview) findviewbyid(r.id.cardlist); tca = new textcardadapter(minflater); listview.setadapter(tca);
adapter:
public class textcardadapter extends baseadapter { private int count = 0; private list<checkablecard> cardlist = new arraylist<checkablecard>(); private layoutinflater minflater; public textcardadapter(layoutinflater inflater) { this.minflater = inflater; } @override public int getcount() { return count; } @override public object getitem(int position) { return cardlist.get(position); } @override public long getitemid(int position) { return position; } @override public view getview(int position, view convertview, viewgroup parent) { final viewholder holder; if (convertview == null) { convertview = minflater.inflate(r.layout.textlayout_row, null, false); convertview.setclickable(true); holder = new viewholder(); holder.text = (textview) convertview.findviewbyid(r.id.card_name); holder.checkbox = (checkbox) convertview.findviewbyid(r.id.checkbox); convertview.settag(holder); } else { holder = (viewholder) convertview.gettag(); } final checkablecard card = cardlist.get(position); holder.text.settext(card.card.tostring()); holder.checkbox.setchecked(card.ischecked()); holder.checkbox.setonclicklistener(card.checklistener); convertview.setonclicklistener(new onclicklistener() { @override public void onclick(view v) { card.checklistener.onclick(v); holder.checkbox.setchecked(card.ischecked()); } }); return convertview; } public void add(card card) { cardlist.add(new checkablecard(card)); count++; notifydatasetchanged(); } public void addall(collection<card> cardcoll) { (card c : cardcoll) add(c); } public void removeall() { count = 0; cardlist.clear(); notifydatasetchanged(); } public card getcard(int position) { checkablecard cc = (checkablecard) getitem(position); if (cc == null) return null; return cc.card; } public class checkablecard implements checkable { private boolean checked = false; public final card card; public final onclicklistener checklistener; public checkablecard(card card) { this.card = card; checklistener = new onclicklistener() { @override public void onclick(view v) { toggle(); } }; } @override public boolean ischecked() { return checked; } @override public void setchecked(boolean checked) { this.checked = checked; } @override public void toggle() { checked = !checked; } } static class viewholder { textview text; checkbox checkbox; } }
just have try:
listview.setchoicemode(listview.choice_mode_multiple);
holder.checkbox.setfocusable(false);
i think listview's sub item view shoudld implements checkable interface, means converted view(convertview) should have method of checkable.
Comments
Post a Comment