android - Removing an item from RecyclerView -


i have problem when removing item list in recyckerview. want following functionality. when press checkbox in recyckerview list want item removed list. works when press of top/bottom checkboxes, when press in-between have other checkboxes marked checked without touching them. don't know problem comes from.

enter image description here

this code in adapter:

public class shoppinglistadapter extends recyclerview.adapter<shoppinglistadapter.shoppinglistviewholder> { private arraylist<item> mitems; private context mcontext;  public shoppinglistadapter(context context, arraylist<item> items) {     mitems = items;     mcontext = context; }  @override public shoppinglistviewholder oncreateviewholder(viewgroup viewgroup, int position) {     view view = layoutinflater.from(mcontext).inflate(r.layout.shopping_list_item,viewgroup,false);     shoppinglistviewholder viewholder = new shoppinglistviewholder(view);      return viewholder; }  @override public void onbindviewholder(shoppinglistviewholder shoppinglistviewholder, int position) {     shoppinglistviewholder.bindshoppinglist(mitems.get(position)); }  @override public int getitemcount() {     return mitems.size(); }  public class shoppinglistviewholder extends recyclerview.viewholder implements compoundbutton.oncheckedchangelistener{     public textview mshoppinglistitem;     public checkbox mcheckbox;      public shoppinglistviewholder(view itemview) {         super(itemview);         mshoppinglistitem = (textview) itemview.findviewbyid(r.id.shoppinglistitem);         mcheckbox = (checkbox) itemview.findviewbyid(r.id.shoppinglistcheckbox);         mcheckbox.setoncheckedchangelistener(this);     }      public void bindshoppinglist(item item){         mshoppinglistitem.settext(item.getitemdescription());     }       @override     public void oncheckedchanged(compoundbutton buttonview, boolean ischecked) {         removeat(getadapterposition(),this);     } }  public void removeat(int position,shoppinglistviewholder viewholder) {     mitems.remove(position);     notifyitemremoved(position); } 

this code in mainactivity:

public class mainactivity extends appcompatactivity { private toolbar mtoolbar; private recyclerview mrecyclerview; private arraylist<item> shoppinglistitems; @override protected void oncreate(bundle savedinstancestate) {     super.oncreate(savedinstancestate);     setcontentview(r.layout.activity_main);      mtoolbar = (toolbar)findviewbyid(r.id.tool_bar);     setsupportactionbar(mtoolbar);     mrecyclerview = (recyclerview)findviewbyid(r.id.recyclerview);     shoppinglistitems = new arraylist<>();     shoppinglistitems.add(new item("apples"));     shoppinglistitems.add(new item("bred"));     shoppinglistitems.add(new item("potatoes"));     shoppinglistitems.add(new item("muffins"));     shoppinglistitems.add(new item("crackers"));     shoppinglistitems.add(new item("spaghetti"));     shoppinglistitems.add(new item("plastic bags"));     shoppinglistitems.add(new item("deodorant"));     shoppinglistitems.add(new item("razors"));     shoppinglistitems.add(new item("shampoo"));     shoppinglistitems.add(new item("tooth brushes"));     shoppinglistitems.add(new item("butter"));     shoppinglistitems.add(new item("bagels"));     shoppinglistitems.add(new item("coconut water"));     shoppinglistitems.add(new item("tomatoes"));      shoppinglistadapter adapter = new shoppinglistadapter(this,shoppinglistitems);     mrecyclerview.additemdecoration(new simpledivideritemdecoration(getapplicationcontext()));     mrecyclerview.setadapter(adapter);     mrecyclerview.setlayoutmanager(new linearlayoutmanager(this));  }  @override public boolean oncreateoptionsmenu(menu menu) {     // inflate menu; adds items action bar if present.     getmenuinflater().inflate(r.menu.menu_main, menu);     return true; }  @override public boolean onoptionsitemselected(menuitem item) {     // handle action bar item clicks here. action bar     // automatically handle clicks on home/up button, long     // specify parent activity in androidmanifest.xml.     int id = item.getitemid();      //noinspection simplifiableifstatement     if (id == r.id.action_settings) {         return true;     }      return super.onoptionsitemselected(item); } 

i think "automatically" checked item(s) reuse view holder of deleted item (including checked checkbox). when bind viewholder try (re)set checkbox' state false:

shoppinglistviewholder {     public void bindshoppinglist(item item){         mshoppinglistitem.settext(item.getitemdescription());         mcheckbox.setchecked(false);// <-     } } 

onbindviewholder place set item's view match item's data


Comments

Popular posts from this blog

How to connect android app to App engine -

gcc - MinGW's ld cannot perform PE operations on non PE output file -

php - display validation error message next to the textbox in codeigniter -