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

Popular posts from this blog

SPSS keyboard combination alters encoding -

Add new record to the table by click on the button in Microsoft Access -

javascript - jQuery .height() return 0 when visible but non-0 when hidden -