Trying to parse array list to main activity (android) -
this mainactivity tried using startactivityforresult method result editactivity app crashes when press add button on editactivity. i'm not sure going wrong.
public class mainactivity extends appcompatactivity { private list list = new arraylist<custombutton>(); private static final int edit_activity_result_code = 1; @override protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_main); } @override protected void onactivityresult(int requestcode, int resultcode, intent data) { super.onactivityresult(requestcode, resultcode, data); // check secondactivity ok result if (requestcode == edit_activity_result_code) { if (resultcode == result_ok) { bundle args = data.getbundleextra("bundle"); list = (arraylist<object>) args.getserializable("buttonlist"); } } } public void buttoneditopen(view view) { intent mintent = new intent(mainactivity.this, editactivity.class); bundle args = new bundle(); args.putserializable("buttonlist",(serializable)list); mintent.putextra("bundle",args); startactivityforresult(mintent, edit_activity_result_code); }
and second activity gets text , date create object called custombutton has single date , name , info, i'm trying parse mainactivity
public class editactivity extends appcompatactivity { private list list = new arraylist<custombutton>(); private int selectedyear; private int selectedmonth; private int selectedday; @override protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); intent intent = getintent(); bundle args = intent.getbundleextra("bundle"); list = (arraylist<object>) args.getserializable("buttonlist"); setcontentview(r.layout.activity_edit); final edittext etdate = (edittext) findviewbyid(r.id.edittextduedate); etdate.setonclicklistener(new view.onclicklistener() { @override public void onclick(view v) { calendar mcurrentdate = calendar.getinstance(); int myear = mcurrentdate.get(calendar.year); int mmonth = mcurrentdate.get(calendar.month); int mday = mcurrentdate.get(calendar.day_of_month); datepickerdialog mdatepicker = new datepickerdialog(editactivity.this, new datepickerdialog.ondatesetlistener() { @override public void ondateset(datepicker datepicker, int tempselectedyear, int tempselectedmonth, int tempselectedday) { // etdate.settext("" + tempselectedyear + "/" + tempselectedmonth + "/" + tempselectedday); setclassdate(tempselectedyear, tempselectedmonth, tempselectedday); } }, myear, mmonth, mday); mdatepicker.settitle("select date"); mdatepicker.show(); } }); } public void buttonaddclick(view view) { // getting information (name, date, info) activity_edit edittext etname = (edittext) findviewbyid(r.id.edittextname); edittext etdate = (edittext) findviewbyid(r.id.edittextduedate); edittext etinfo = (edittext) findviewbyid(r.id.edittextinfo); dateformat df = new simpledateformat("dd/mm/yyyy"); try { date date = df.parse(etdate.gettext() + ""); custombutton tempbutton = new custombutton(etname.gettext() + "", date, etinfo.gettext() + ""); list.add(list.size(), tempbutton); intent mintent = new intent(); bundle args = new bundle(); args.putserializable("buttonlist", (serializable) list); mintent.putextra("bundle", args); setresult(result_ok, mintent); finish(); } catch (parseexception e) { e.printstacktrace(); } } public void setclassdate(int tempselectedyear, int tempselectedmonth, int tempselectedday) { this.selectedyear = tempselectedyear; this.selectedmonth = tempselectedmonth; this.selectedday = tempselectedday; edittext etdate = (edittext) findviewbyid(r.id.edittextduedate); // student teacher, using mode 100 returns 2 decimal numbers. adding 0 month , date less 9 if (selectedmonth % 100 > 9 && selectedday % 100 > 9) { etdate.settext(selectedday + "/" + selectedmonth + "/" + selectedyear); } else if (selectedmonth % 100 > 9) { etdate.settext("0" + selectedday + "/" + selectedmonth + "/" + selectedyear); } else if (selectedday % 100 > 9) { etdate.settext(selectedday + "/0" + selectedmonth + "/" + selectedyear); } else { etdate.settext("0" + selectedday + "/0" + selectedmonth + "/" + selectedyear); } } }
editted comment requesting custombutton class:
public class custombutton { private string _name; private date _duedate; private string _description; public custombutton(string _name, date _duedate, string _description) { this._name = _name; this._duedate = _duedate; this._description = _description; } public string get_name() { return _name; } public void set_name(string _name) { this._name = _name; } public date get_duedate() { return _duedate; } public void set_duedate(date _duedate) { this._duedate = _duedate; } public string get_description() { return _description; } public void set_description(string _description) { this._description = _description; } @override public string tostring() { string output = _name + '\'' + _duedate + '\''+_description; return output; } }
replace existing model class this
public class custombutton implements parcelable{ private string _name; private date _duedate; private string _description; public custombutton(string _name, date _duedate, string _description) { this._name = _name; this._duedate = _duedate; this._description = _description; } protected custombutton(parcel in) { _name = in.readstring(); _description = in.readstring(); } public static final creator<custombutton> creator = new creator<custombutton>() { @override public custombutton createfromparcel(parcel in) { return new custombutton(in); } @override public custombutton[] newarray(int size) { return new custombutton[size]; } }; public string get_name() { return _name; } public void set_name(string _name) { this._name = _name; } public date get_duedate() { return _duedate; } public void set_duedate(date _duedate) { this._duedate = _duedate; } public string get_description() { return _description; } public void set_description(string _description) { this._description = _description; } @override public string tostring() { string output = _name + '\'' + _duedate + '\''+_description; return output; } @override public int describecontents() { return 0; } @override public void writetoparcel(parcel dest, int flags) { dest.writestring(_name); dest.writestring(_description); } }
changes in mainactivity class
@override protected void onactivityresult(int requestcode, int resultcode, intent data) { super.onactivityresult(requestcode, resultcode, data); // check secondactivity ok result if (requestcode == edit_activity_result_code) { if (resultcode == result_ok) { list<custombutton> list= data.getparcelablearraylistextra("bundle"); } } } public void buttoneditopen(view view) { intent mintent = new intent(mainactivity.this, editactivity.class); mintent.putparcelablearraylistextra("bundle", list); startactivityforresult(mintent, edit_activity_result_code); }
now changes in edit class
//oncreate method
super.oncreate(savedinstancestate); intent intent = getintent(); list = intent.getparcelablearraylistextra("bundle");
//set result in edit class this
intent mintent = new intent(); mintent.putparcelablearraylistextra("bundle", list); setresult(result_ok, mintent); finish();
Comments
Post a Comment