android - How to wire up a delete button to delete one item on a listview? -


i know there lots of threads more or less same topic none of them covers situation:

i trying delete button delete 1 row on list view , delete button appear in each row got part work can't work in main activity. code keeps breaking every time put part in code:

imagebutton removebutton = (imagebutton) findviewbyid(r.id.btndel); removebutton.setonclicklistener(new view.onclicklistener() {     @override     public void onclick(view view) {         onremovebuttonclick();     }     private void  onremovebuttonclick() {         todoitem item = (todoitem) v.gettag();         notifydatasetchanged(); } 

my mainactivity works fine without bit of code. don't know if code or if placing in mainactivity if please tell appreciated.

mainactivity.java

public class mainactivity extends appcompatactivity {     private static final string log_tag = "todoapp";     private todolistmanager listmanager;      @override     protected void oncreate(bundle savedinstancestate) {         super.oncreate(savedinstancestate);         setcontentview(r.layout.activity_main);          listview todolist = (listview) findviewbyid(r.id.todo_list);         listmanager = new todolistmanager(getapplicationcontext());         todoitemadapter adapter = new todoitemadapter(this, listmanager.getlist());           todolist.setadapter(adapter);         imagebutton addbutton = (imagebutton) findviewbyid(r.id.add_item);         addbutton.setonclicklistener(new view.onclicklistener() {             @override             public void onclick(view v) {                 onaddbuttonclick();             }         });     }      @override     protected void onpause() {         super.onpause();         listmanager.savelist();     }      private void onaddbuttonclick() {         alertdialog.builder builder = new alertdialog.builder(this);         builder.settitle(r.string.add_item);          final edittext input = new edittext(this);         input.setinputtype(inputtype.type_class_text);         builder.setview(input);          builder.setpositivebutton(             r.string.ok,             new dialoginterface.onclicklistener() {                 @override                 public void onclick(dialoginterface dialoginterface, int i) {                     //add item list                     todoitem item = new todoitem(                             input.gettext().tostring(),                             false                     );                     listmanager.additem(item);                     log.i(log_tag, input.gettext().tostring());                 }             });         builder.setnegativebutton(             r.string.cancel,             new dialoginterface.onclicklistener(){                 @override                 public void onclick(dialoginterface dialog, int which) {                     dialog.cancel();                 }             });          builder.show();     }      private class todoitemadapter extends arrayadapter<todoitem> {          private  context context;         private list<todoitem> items;         public todoitemadapter(context context, list<todoitem> items){             super(context,-1,  items);              this.context = context;             this.items = items;         }          @override         public view getview(int position, view convertview, viewgroup parent) {             if(convertview == null) {                 layoutinflater inflater = (layoutinflater) context.                     getsystemservice(context.layout_inflater_service);                 convertview = inflater.inflate(r.layout.to_do_item_layout, parent, false);             }              textview textview = (textview) convertview.findviewbyid(r.id.item);             checkbox checkbox = (checkbox) convertview.findviewbyid(r.id.checkbox);              textview.settext(items.get(position).getdescription());             checkbox.setchecked(items.get(position).iscomplete());              convertview.settag(items.get(position));             convertview.setonclicklistener(new view.onclicklistener() {                 @override                 public void onclick(view v) {                     todoitem item = (todoitem) v.gettag();                     item.togglecomplete();                     notifydatasetchanged();                 }             });             return convertview;         }     } } 

todolistmanager.java

public class todolistmanager {   private static final string app_preferences = "todoapp"; private static final string todo_items = "itemslist";  private list<todoitem> items; private sharedpreferences saveddata;  public  todolistmanager(context context) {       saveddata = context.getsharedpreferences (         app_preferences,         context.mode_private     );      string json = saveddata.getstring(todo_items, null);     if (json == null) {     items = new arraylist<>();   } else {   type type = new typetoken<list<todoitem>>() {}.gettype();  items = new gson().fromjson(json, type); }   }  public list<todoitem> getlist() {  return items;  }  public void  additem(todoitem item) {     items.add(item);     savelist();   }  public  void savelist() {     sharedpreferences.editor edit =saveddata.edit();     edit.clear();     string json = new gson().tojson(items);      edit.putstring(todo_items, json);     edit.apply();  }  } 

todoitem.java

public class todoitem { private string description; private boolean iscomplete;  public todoitem (string description,boolean iscomplete) {     this.description = description;     this.iscomplete = iscomplete; }  public string getdescription() {     return  description; } public boolean iscomplete() {     return iscomplete; } public void togglecomplete() {     iscomplete = !iscomplete; } @override public string tostring() {     return description; } } 

enter image description here

1.) add button to_do_item_layout first

2.) add code add button each item

button btn = (button) convertview.findviewbyid(r.id.my_btn); 

3.) add listener it

btn.setonclicklistener(new view.onclicklistener() {       @override       public void onclick(view v) {          items.remove(items.get(position));                } }); 

Comments