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.

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
Post a Comment