java - gmail like listView with checkBoxes: which ones are selected? -
i have list view has check box text. when checkbox gets selected, opens action mode. can delete item. question is: how can find out in deletecurrentitem() checkbox selected since don't use listview's internal checked state?
public class mainactivity extends activity implements loadermanager.loadercallbacks<cursor> { private simplecursoradapter msimplecursoradapter = null; private final string[] projection = { databasehelper.key_id, databasehelper.key_title, databasehelper.key_date }; private actionmode mactionmode = null; private actionmode.callback mactionmodecallback = new actionmode.callback() { // called when action mode created; startactionmode() called @override public boolean oncreateactionmode(actionmode mode, menu menu) { // inflate menu resource providing context menu items menuinflater inflater = mode.getmenuinflater(); inflater.inflate(r.menu.context_menu, menu); return true; } // called each time action mode shown. called after oncreateactionmode, // may called multiple times if mode invalidated. @override public boolean onprepareactionmode(actionmode mode, menu menu) { return false; // return false if nothing done } // called when user selects contextual menu item @override public boolean onactionitemclicked(actionmode mode, menuitem item) { switch (item.getitemid()) { case r.id.context_menu_delete: deletecurrentitem(); mode.finish(); // action picked, close cab return true; case r.id.context_menu_edit: editcurrentitem(); mode.finish(); return true; case r.id.context_menu_markas_done: mode.finish(); return true; default: return false; } } // called when user exits action mode @override public void ondestroyactionmode(actionmode mode) { mactionmode = null; } }; @override protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); settheme(android.r.style.theme_holo_light); setcontentview(r.layout.activity_main); getloadermanager().initloader(0, null, this); msimplecursoradapter = new specialadapter(this, r.layout.row, null, projection, new int[] { r.id.titleid, r.id.datetimeorlocationid }, cursoradapter.flag_register_content_observer); listview listview = (listview) findviewbyid(r.id.list); listview.setadapter(msimplecursoradapter); } public void startactionmode() { mactionmode = startactionmode(mactionmodecallback); } public void deletecurrentitem() { layoutinflater inflater = layoutinflater.from(this); final view view = inflater.inflate(r.layout.row, null, false); checkbox chxbox = (checkbox)view.findviewbyid(r.id.itemchxboxid); listview listview = (listview)findviewbyid(r.id.list); long[] ids = listview.getcheckeditemids(); for(int i=0; i<ids.length; i++) { string = long.tostring(ids[i]); if(!where.isempty()) { getcontentresolver().delete(remindercontentprovider.content_uri, where, null); } } }
adapter class:
public class specialadapter extends simplecursoradapter { ... @override public view newview(context context, cursor cursor, viewgroup parent) { super.newview(context, cursor, parent); final int pos = cursor.getposition(); system.out.println(); viewholder holder = new viewholder(); layoutinflater inflater = layoutinflater.from(context); final view view = inflater.inflate(r.layout.row, parent, false); checkbox chxbox = (checkbox)view.findviewbyid(r.id.itemchxboxid); chxbox.setfocusable(false); chxbox.setoncheckedchangelistener(new oncheckedchangelistener() { @override public void oncheckedchanged(compoundbutton buttonview, boolean ischecked) { if(ischecked) { mainactivity activity = (mainactivity)view.getcontext(); activity.startactionmode(); } } }); int colorpos = cursor.getposition() % colors.length; view.setbackgroundcolor(colors[colorpos]); holder.mtitle = (textview) view.findviewbyid(r.id.titleid); int col = cursor.getcolumnindex(dbadapter.key_title); holder.mtitle.settext(cursor.getstring(col)); holder.mtitle.settag(holder); col = cursor.getcolumnindex(dbadapter.key_date); date date = new date(cursor.getlong(col)); holder.mdate = (textview) view.findviewbyid(r.id.datetimeorlocationid); holder.mdate.settext(date.tostring()); holder.mdatestring = date.tostring(); holder.mdate.settag(holder); calendar cal = calendar.getinstance(); long diff = cal.gettimeinmillis() - date.gettime(); date diffdate = new date(diff); simpledateformat timeformat = new simpledateformat("hh:mm"); holder.mcountdown = (textview) view.findviewbyid(r.id.countdownid); holder.mcountdown.settext(timeformat.format(diffdate)); holder.mcountdownstring = timeformat.format(diffdate); holder.mcountdown.settag(holder); return view; } }
you'll have reference position of item in listview selected, , compare said position array of data.
ie. data[position] item in dataset checked
it may easier position overriding getview() method, , setting oncheckedchangedlistener inside there; way have easy reference position being checked
Comments
Post a Comment