Tuesday, 15 February 2011

Android - How to delete multiple items from listView with checkBox ? -



Android - How to delete multiple items from listView with checkBox ? -

i have issue when seek delete multiple checked items listview. if start deleting downwards items removed list, there problem when downwards or if random items checked. problem checked items not deleted, unchecked items deleted.

public class mainactivity extends actionbaractivity { private edittext etn,etl,etd; private button add; private button rmv; private listview listview; private arraylist<data> list; private mycustomadapter dataadapter = null; @override protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.menu); listview = (listview) findviewbyid(r.id.listview1); list = new arraylist<data>(); add together = (button) findviewbyid(r.id.btn_add); etn = (edittext) findviewbyid(r.id.edit_name); eta = (edittext) findviewbyid(r.id.edit_lastname); etd = (edittext) findviewbyid(r.id.edit_document); rmv = (button) findviewbyid(r.id.btn_delete); displayview(); } public class info { long document; string name; string lastname; boolean selected = false; public data(long document, string name, string lastname, boolean selected){ this.document=document; this.name=nom; this.lastname=lastname; this.selected = selected; } public string getname(){ homecoming name; } public string getlastname(){ homecoming lastname; } public long getdocument(){ homecoming document; } public boolean isselected() { homecoming selected; } public void setselected(boolean selected) { this.selected = selected; } } public void displayview(){ string name = etn.gettext().tostring(); string lastname= eta.gettext().tostring(); long document = integer.valueof(etd.gettext().tostring()); info edata = new data(document,name,lastname,false); list.add(edata); dataadapter = new mycustomadapter(this, r.layout.list_info, list); listview.setadapter(dataadapter); } public void delete(view view){ deletelistitem(); } private void deletelistitem(){ if(list.isempty()){ toast.maketext(getapplicationcontext(), "no items delete.", toast.length_long).show(); return; } int itemcount = listview.getcount(); for(int i=itemcount - 1 ; i>=0; i--){ info aux = list.get(i); if(aux.isselected()){ dataadapter.remove(aux); } } dataadapter.notifydatasetchanged(); } private class mycustomadapter extends arrayadapter<data> { private arraylist<data> list; public mycustomadapter(context context, int textviewresourceid, arraylist<data> list) { super(context, textviewresourceid, list); this.list = new arraylist<data>(); this.list.addall(list); } private class viewholder { textview name; textview lname; textview doc; checkbox ck; } @override public view getview(int position, view convertview, viewgroupparent) { viewholder holder = null; if (convertview == null) { layoutinflater vi = (layoutinflater)getsystemservice( context.layout_inflater_service); convertview = vi.inflate(r.layout.list_info, null); holder = new viewholder(); holder.name = (textview) convertview.findviewbyid(r.id.name); holder.ck = (checkbox) convertview.findviewbyid(r.id.checkbox1); holder.lname = (textviewconvertview.findviewbyid(r.id.lastname); holder.doc = (textview)convertview.findviewbyid(r.id.document); convertview.settag(holder); holder.ck.setonclicklistener( new view.onclicklistener() { public void onclick(view v) { checkbox cb = (checkbox) v ; info edata = (data) cb.gettag(); toast.maketext(getapplicationcontext(), "checkbox: " + cb.gettext() + " " + cb.ischecked(), toast.length_long).show(); edata.setselected(cb.ischecked()); } }); } else { holder = (viewholder) convertview.gettag(); } info aux = list.get(position); long document = aux.getdocument(); holder.doc.settext("doc:" + long.tostring(document)); holder.name.settext (" " + "name:" + aux.getname()+ " "); holder.lname.settext("last name:" + aux.getlastname()); holder.ck.settag(aux); holder.ck.setchecked(aux.isselected()); homecoming convertview; } }

i think problem resides in block :

int itemcount = listview.getcount(); for(int i=itemcount - 1 ; i>=0; i--){ info aux = list.get(i); if(aux.isselected()){ dataadapter.remove(aux); } }

try :

int itemcount = listview.getcount(); for(int i=itemcount - 1 ; i>=0; i--){ info aux = dataadapter.getitem(i); if(aux.isselected()){ dataadapter.remove(aux); } }

note : not sure, please seek , allow me know result .:)

android listview

No comments:

Post a Comment