android - Dynamically adding data to listView which does not overwrite the previous data and permanently saving it -


in following program, when click on add button in options menu dialog opened wherein user enters data shown in listview. there number of problems code.

1) age.settext in custom adapter causes app crash.commenting out age.settext line, works other 2 textviews.

2) when add data in list using dialog second time, list gets overwritten , no updation done. want list automatically updated when new data entered rather on writing it.

3) data vanishes away when restart app. want data saved permanently.

code custom adapter is:

package com.example.sakshi.dialogsandmenus;  import android.content.context; import android.view.layoutinflater; import android.view.view; import android.view.viewgroup; import android.widget.baseadapter; import android.widget.imageview; import android.widget.textview; import org.w3c.dom.text; import java.util.arraylist;  public class customadapter extends baseadapter {     private context context;     private arraylist<data> list;     private layoutinflater mlayoutinflator;     public customadapter(context context, arraylist list){     this.context=context;     this.list=list;     mlayoutinflator = (layoutinflater)context.getsystemservice(context.layout_inflater_service); } @override public int getcount() {     return list.size(); }  @override public object getitem(int position) {     return list.get(position); }  @override public long getitemid(int position) {     return position; }  @override public view getview(int position, view convertview, viewgroup parent) {     convertview = mlayoutinflator.inflate(r.layout.row,null);     textview name = (textview)convertview.findviewbyid(r.id.name);     textview age = (textview)convertview.findviewbyid(r.id.agedata);     textview dob = (textview)convertview.findviewbyid(r.id.dob);     name.settext(list.get(position).getname());     //age.settext(list.get(position).getage());     dob.settext(list.get(position).getdate());     return convertview;     } } 

code main activity is:

package com.example.sakshi.dialogsandmenus;  import android.app.dialog; import android.support.v7.app.appcompatactivity; import android.os.bundle; import android.view.menu; import android.view.menuinflater; import android.view.menuitem; import android.view.view; import android.widget.button; import android.widget.datepicker; import android.widget.edittext; import android.widget.listview; import java.util.arraylist; import static android.r.id.list; import static com.example.sakshi.dialogsandmenus.r.id.date;  public class mainactivity extends appcompatactivity{     listview listview;     arraylist<data> arraylist;  @override protected void oncreate(bundle savedinstancestate) {     super.oncreate(savedinstancestate);     setcontentview(r.layout.activity_main);     listview = (listview)findviewbyid(r.id.list_item);  }  @override public boolean oncreateoptionsmenu(menu menu) {     menuinflater menuinflater = getmenuinflater();     menuinflater.inflate(r.menu.menu,menu);     return true; }  @override public boolean onoptionsitemselected(menuitem item) {     int id= item.getitemid();     if(id==r.id.add){          filldialog();     }      return super.onoptionsitemselected(item); }  public void filldialog(){     final dialog dialog = new dialog(mainactivity.this);     dialog.setcanceledontouchoutside(false);     dialog.setcontentview(r.layout.dialog_layout);     dialog.show();     button add = (button)dialog.findviewbyid(r.id.additem);     final edittext getnamedata = (edittext)dialog.findviewbyid(r.id.name);     final edittext getagedata = (edittext)dialog.findviewbyid(r.id.age);     final datepicker datepicker = (datepicker)dialog.findviewbyid(date);      add.setonclicklistener(new view.onclicklistener() {         @override         public void onclick(view v) {             string getname =  getnamedata.gettext().tostring();             int getage = integer.parseint(getagedata.gettext().tostring());             int mm,y,d;             mm=datepicker.getmonth();             y=datepicker.getyear();             d=datepicker.getdayofmonth();             string getdate = d+"/"+mm+"/"+y;             arraylist = new arraylist<>();              data data = new data();             data.setname(getname);             data.setage(getage);             data.setdate(getdate);             arraylist.add(data);               customadapter customadapter = new customadapter(mainactivity.this,arraylist);             listview.setadapter(customadapter);             //customadapter.notifydatasetchanged();             dialog.dismiss();          }     });  } 

}

1) have convert value of age string before settext //age.settext(list.get(position).getage());

age.settext(integer.tostring(list.get(position).getage()));

2) every time new arraylist initilaization intarraylist = new arraylist<>();

arraylist arraylist = new arraylist<>(); public void filldialog(){     final dialog dialog = new dialog(mainactivity.this);     dialog.setcanceledontouchoutside(false);     dialog.setcontentview(r.layout.dialog_layout);     dialog.show();     button add = (button)dialog.findviewbyid(r.id.additem);     final edittext getnamedata = (edittext)dialog.findviewbyid(r.id.name);     final edittext getagedata = (edittext)dialog.findviewbyid(r.id.age);     final datepicker datepicker = (datepicker)dialog.findviewbyid(date);      customadapter customadapter = new customadapter(mainactivity.this,arraylist);     listview.setadapter(customadapter);     add.setonclicklistener(new view.onclicklistener() {         @override         public void onclick(view v) {             string getname =  getnamedata.gettext().tostring();             int getage = integer.parseint(getagedata.gettext().tostring());             int mm,y,d;             mm=datepicker.getmonth();             y=datepicker.getyear();             d=datepicker.getdayofmonth();             string getdate = d+"/"+mm+"/"+y;              data data = new data();             data.setname(getname);             data.setage(getage);             data.setdate(getdate);             arraylist.add(data);             customadapter.notifydatasetchanged();             dialog.dismiss();          }     }); 

enter code here

3) use sqlite or anystorage option data saving


Comments

Popular posts from this blog

python - Selenium remoteWebDriver (& SauceLabs) Firefox moseMoveTo action exception -

html - How to custom Bootstrap grid height? -

transpose - Maple isnt executing function but prints function term -