recursion - Stack Over Flow Error When generating form dynamically in android -
i have class creating views dynamically json.as follows
class widget{ public static view createedittext(context ctx,string hint,string hint_color,string text_color,string bg_color,string input_type,linearlayout.layoutparams params){ edittext et=new edittext(ctx); et.sethint(hint); if(input_type.equals("password")){ et.settransformationmethod(passwordtransformationmethod.getinstance()); }else if(input_type.equals("email")){ et.setinputtype(inputtype.type_text_variation_email_address); }else if(input_type.equals("number")){ et.setinputtype(inputtype.type_class_number); }else if(input_type.equals("text")){ et.setinputtype(inputtype.type_class_text); }else if(input_type.equals("date")){ et.setinputtype(inputtype.type_class_datetime); } et.settextcolor(color.parsecolor(text_color)); et.sethinttextcolor(color.parsecolor(hint_color)); et.setbackgroundcolor(color.parsecolor(bg_color)); et.setlayoutparams(params); return et; } }
like have more methods remaining views label & button etc.when call these methods activity, throwing stack on flow error
else if (container.getview_type().equals("textfield")) { if(container.getweight() == 0.0){ ll.addview(widget.createedittext(getactivity(), container.getview_hint(), container.gethint_color(), container.getcolor_text(), container.getcolor_bg(), container.getinputtype(), setparams(container.getwidth(), container.getheight(),container.getmargins()))); }else{ ll.addview(widget.createedittext(getactivity(), container.getview_hint(), container.gethint_color(), container.getcolor_text(), container.getcolor_bg(), container.getinputtype(), setparams(container.getwidth(), container.getheight(),container.getmargins(),container.getweight()))); } }
my log follows
> 04-14 03:18:49.352: e/androidruntime(1363): fatal exception: main 04-14 03:18:49.352: e/androidruntime(1363): java.lang.stackoverflowerror 04-14 03:18:49.352: e/androidruntime(1363): @ android.view.view.invalidate(view.java:10494) 04-14 03:18:49.352: e/androidruntime(1363): @ android.widget.textview.invalidateregion(textview.java:4543) 04-14 03:18:49.352: e/androidruntime(1363): @ android.widget.textview.invalidatecursor(textview.java:4534) 04-14 03:18:49.352: e/androidruntime(1363): @ android.widget.textview.spanchange(textview.java:7412) 04-14 03:18:49.352: e/androidruntime(1363): @ android.widget.textview$changewatcher.onspanadded(textview.java:9103) 04-14 03:18:49.352: e/androidruntime(1363): @ android.text.spannablestringbuilder.sendspanadded(spannablestringbuilder.java:979) 04-14 03:18:49.352: e/androidruntime(1363): @ android.text.spannablestringbuilder.setspan(spannablestringbuilder.java:688) 04-14 03:18:49.352: e/androidruntime(1363): @ android.text.spannablestringbuilder.setspan(spannablestringbuilder.java:588) 04-14 03:18:49.352: e/androidruntime(1363): @ android.text.selection.setselection(selection.java:76) 04-14 03:18:49.352: e/androidruntime(1363): @ android.text.selection.setselection(selection.java:87) 04-14 03:18:49.352: e/androidruntime(1363): @ android.text.method.arrowkeymovementmethod.initialize(arrowkeymovementmethod.java:302) 04-14 03:18:49.352: e/androidruntime(1363): @ android.widget.textview.settext(textview.java:3759) 04-14 03:18:49.352: e/androidruntime(1363): @ android.widget.textview.settext(textview.java:3629) 04-14 03:18:49.352: e/androidruntime(1363): @ android.widget.edittext.settext(edittext.java:80) 04-14 03:18:49.352: e/androidruntime(1363): @ android.widget.textview.<init>(textview.java:1266) 04-14 03:18:49.352: e/androidruntime(1363): @ android.widget.edittext.<init>(edittext.java:60) 04-14 03:18:49.352: e/androidruntime(1363): @ android.widget.edittext.<init>(edittext.java:56) 04-14 03:18:49.352: e/androidruntime(1363): @ android.widget.edittext.<init>(edittext.java:52) 04-14 03:18:49.352: e/androidruntime(1363): @ com.demo.dynamic.javaclasslist.widget.createedittext(widget.java:94) 04-14 03:18:49.352: e/androidruntime(1363): @ com.demo.dynamic.activitylist.newtrip_fragment.createform(newtrip_fragment.java:391) 04-14 03:18:49.352: e/androidruntime(1363): @ com.demo.dynamic.activitylist.newtrip_fragment.createform(newtrip_fragment.java:414) 04-14 03:18:49.352: e/androidruntime(1363): @ com.demo.dynamic.activitylist.newtrip_fragment.createform(newtrip_fragment.java:414) 04-14 03:18:49.352: e/androidruntime(1363): @ com.demo.dynamic.activitylist.newtrip_fragment.createform(newtrip_fragment.java:414) 04-14 03:18:49.352: e/androidruntime(1363): @ com.demo.dynamic.activitylist.newtrip_fragment.createform(newtrip_fragment.java:414) 04-14 03:18:49.352: e/androidruntime(1363): @ com.demo.dynamic.activitylist.newtrip_fragment.createform(newtrip_fragment.java:414) 04-14 03:18:49.352: e/androidruntime(1363): @ com.demo.dynamic.activitylist.newtrip_fragment.createform(newtrip_fragment.java:414) 04-14 03:18:49.352: e/androidruntime(1363): @ com.demo.dynamic.activitylist.newtrip_fragment.createform(newtrip_fragment.java:414) 04-14 03:18:49.352: e/androidruntime(1363): @ com.demo.dynamic.activitylist.newtrip_fragment.createform(newtrip_fragment.java:414) 04-14 03:18:49.352: e/androidruntime(1363): @ com.demo.dynamic.activitylist.newtrip_fragment.createform(newtrip_fragment.java:414) 04-14 03:18:49.352: e/androidruntime(1363): @ com.demo.dynamic.activitylist.newtrip_fragment.createform(newtrip_fragment.java:414) 04-14 03:18:49.352: e/androidruntime(1363): @ com.demo.dynamic.activitylist.newtrip_fragment.createform(newtrip_fragment.java:414) 04-14 03:18:49.352: e/androidruntime(1363): @ com.demo.dynamic.activitylist.newtrip_fragment.createform(newtrip_fragment.java:414) 04-14 03:18:49.352: e/androidruntime(1363): @ com.demo.dynamic.activitylist.newtrip_fragment.createform(newtrip_fragment.java:414) 04-14 03:18:49.352: e/androidruntime(1363): @ com.demo.dynamic.activitylist.newtrip_fragment.createform(newtrip_fragment.java:414) 04-14 03:18:49.352: e/androidruntime(1363): @ com.demo.dynamic.activitylist.newtrip_fragment.createform(newtrip_fragment.java:414) 04-14 03:18:49.352: e/androidruntime(1363): @ com.demo.dynamic.activitylist.newtrip_fragment.createform(newtrip_fragment.java:414) 04-14 03:18:49.352: e/androidruntime(1363): @ com.demo.dynamic.activitylist.newtrip_fragment.createform(newtrip_fragment.java:414) 04-14 03:18:49.352: e/androidruntime(1363): @ com.demo.dynamic.activitylist.newtrip_fragment.createform(newtrip_fragment.java:414) 04-14 03:18:49.352: e/androidruntime(1363): @ com.demo.dynamic.activitylist.newtrip_fragment.createform(newtrip_fragment.java:414) 04-14 03:18:49.352: e/androidruntime(1363): @ com.demo.dynamic.activitylist.newtrip_fragment.createform(newtrip_fragment.java:414) 04-14 03:18:49.352: e/androidruntime(1363): @ com.demo.dynamic.activitylist.newtrip_fragment.createform(newtrip_fragment.java:414) 04-14 03:18:49.352: e/androidruntime(1363): @ com.demo.dynamic.activitylist.newtrip_fragment.createform(newtrip_fragment.java:414) 04-14 03:18:49.352: e/androidruntime(1363): @ com.demo.dynamic.activitylist.newtrip_fragment.createform(newtrip_fragment.java:414) 04-14 03:18:49.352: e/androidruntime(1363): @ com.demo.dynamic.activitylist.newtrip_fragment.createform(newtrip_fragment.java:414) 04-14 03:18:49.352: e/androidruntime(1363): @ com.demo.dynamic.activitylist.newtrip_frag
i'm calling same method creating each view.as have switch case in that, checking view type & calling same method.can suggest me in right way.any great full.thank in advance.
edit 1: createform code :
view createform(final container container){ linearlayout ll; string id=container.getid(); ll=new linearlayout(getactivity()); ll.setbackgroundcolor(color.parsecolor("#ffffff")); ll.setorientation(linearlayout.vertical); if(container.getview_type().equals("label")){ if(container.getweight() == 0.0){ ll.addview(widget.createtextview(getactivity(), container.getcolor_text(), container.getcolor_bg(), container.getview_text(), setparams(container.getwidth(), container.getheight(),container.getmargins()), container.gettext_size())); }else{ ll.addview(widget.createtextview(getactivity(), container.getcolor_text(), container.getcolor_bg(), container.getview_text(), setparams(container.getwidth(), container.getheight(),container.getmargins(),container.getweight()), container.gettext_size())); } }else if (container.getview_type().equals("textfield")) { if(container.getweight() == 0.0){ ll.addview(widget.createedittext(getactivity(), container.getview_hint(), container.gethint_color(), container.getcolor_text(), container.getcolor_bg(), container.getinputtype(), setparams(container.getwidth(), container.getheight(),container.getmargins()))); }else{ ll.addview(widget.createedittext(getactivity(), container.getview_hint(), container.gethint_color(), container.getcolor_text(), container.getcolor_bg(), container.getinputtype(), setparams(container.getwidth(), container.getheight(),container.getmargins(),container.getweight()))); } }else if (container.getview_type().equals("button")) { if(container.getonclick().equals("popup")){ linearlayout ll_child = null; if(container.getcontainchild()==false){ if(container.getweight() == 0.0){ ll.addview(widget.createbutton(getactivity(), container.getview_text(), container.getcolor_text(), container.getcolor_bg(), setparams(container.getwidth(), container.getheight(),container.getmargins()), container.getonclick(),container.getdialog_title())); }else{ ll.addview(widget.createbutton(getactivity(), container.getview_text(), container.getcolor_text(), container.getcolor_bg(), setparams(container.getwidth(), container.getheight(),container.getmargins(),container.getweight()), container.getonclick(),container.getdialog_title())); } }else{ for(int j=0;j<containerlist.size();j++){ if(id.equals(container_child=containerlist.get(j))) continue; ll_child=new linearlayout(getactivity()); ll_child.setbackgroundcolor(color.parsecolor("#ffffff")); ll_child.setorientation(linearlayout.vertical); if(containerlist.get(j).getid().contains(id)){ container_child=containerlist.get(j); ll_child.addview(createform(container_child)); if(container.getweight() == 0.0){ ll.addview(widget.createbutton(getactivity(), container.getview_text(),container.getcolor_text(),container.getcolor_bg(), setparams(container.getwidth(), container.getheight(),container.getmargins()), container.getonclick(), container.getdialog_title(), ll_child,"vertical")); }else{ ll.addview(widget.createbutton(getactivity(), container.getview_text(),container.getcolor_text(),container.getcolor_bg(), setparams(container.getwidth(), container.getheight(),container.getmargins(),container.getweight()), container.getonclick(), container.getdialog_title(), ll_child,"vertical")); } } } } } else if(container.getonclick().equals("accordion")){ if(container.getweight() == 0.0){ ll.addview(widget.createbutton(getactivity(), container.getview_text(), container.getcolor_text(), container.getcolor_bg(), setparams(container.getwidth(), container.getheight(),container.getmargins()))); }else{ ll.addview(widget.createbutton(getactivity(), container.getview_text(), container.getcolor_text(), container.getcolor_bg(), setparams(container.getwidth(), container.getheight(),container.getmargins(),container.getweight()))); } final linearlayout ll_child=new linearlayout(getactivity()); ll_child.setbackgroundcolor(color.parsecolor("#ffffff")); ll_child.setorientation(linearlayout.vertical); for(int j=0;j<containerlist.size();j++){ if(id == containerlist.get(j).getparentid()){ container_child=containerlist.get(j); ll_child.addview(createform(container_child)); } } ll.addview(ll_child); ll_child.setvisibility(view.gone); ll.getchildat(0).setonclicklistener(new onclicklistener() { @override public void onclick(view v) { //toast.maketext(getactivity(), "ll_child 0",toast.length_long).show(); flag++; if(container_child.getview_type().equals("datepickerdialog")){ widget.createdatepickerdialog(getactivity()); }else{ if(flag == 1){ ll_child.setvisibility(view.visible); } if(flag == 2){ flag=0; ll_child.setvisibility(view.gone); } } } }); } } else if(container.getview_type().equals("select")){ spinner spinner = null; if(container.getweight() == 0.0){ spinner=(spinner) widget.createspinner(getactivity(), container.getspinner_choices(),setparams(container.getwidth(), container.getwidth(), container.getmargins()),container.getcolor_bg(),container.getcolor_text()); }else{ spinner=(spinner) widget.createspinner(getactivity(), container.getspinner_choices(),setparams(container.getwidth(), container.getwidth(), container.getmargins(),container.getweight()),container.getcolor_bg(),container.getcolor_text()); } ll.addview(spinner); spinner.setonitemselectedlistener(new onitemselectedlistener() { @override public void onitemselected(adapterview<?> parent, view view, int position, long id) { if(position > 0){ toast.maketext(getactivity(), ""+container.getspinner_choices_db()[position], toast.length_short).show(); } } @override public void onnothingselected(adapterview<?> parent) { } }); } else if(container.getview_type().equals("layout")){ linearlayout ll_temp = null; if(container.getweight()== 0.0){ ll_temp=(linearlayout) widget.createlinearlayout(getactivity(), container.getorientation(), container.getcolor_bg(),setparams(container.getwidth(), container.getheight(), container.getmargins())); }else{ ll_temp=(linearlayout) widget.createlinearlayout(getactivity(), container.getorientation(), container.getcolor_bg(),setparams(container.getwidth(), container.getheight(), container.getmargins(),container.getweight())); } if(container.getcontainchild() == true){ for(int j=0;j<containerlist.size();j++){ if(id == containerlist.get(j).getparentid()){ container_child=containerlist.get(j); ll_temp.addview(createform(container_child)); } } ll.addview(ll_temp); } } else if(container.getview_type().equals("datepicker")){ datepicker.ondatechangedlistener listener=new ondatechangedlistener() { @override public void ondatechanged(datepicker view, int year, int monthofyear, int dayofmonth) { toast.maketext(getactivity(), ""+view.getyear()+"/"+(monthofyear+1)+"/"+dayofmonth, toast.length_short).show(); } }; calendar c=calendar.getinstance(); int year_c=c.get(calendar.year); int month_c=c.get(calendar.month); int day_c=c.get(calendar.day_of_month); if(container.getweight() == 0.0){ datepicker=(datepicker) widget.createdatepicker(getactivity(), year_c, month_c, day_c,container.getcolor_bg(), setparams(container.getwidth(), container.getheight(), container.getmargins()),listener); }else{ datepicker=(datepicker) widget.createdatepicker(getactivity(), year_c, month_c, day_c, container.getcolor_bg(),setparams(container.getwidth(), container.getheight(), container.getmargins(),container.getweight()),listener); } ll.addview(datepicker); } else if(container.getview_type().equals("checkbox_boolean")){ checkbox cb=(checkbox)widget.createcheckboxboolean(getactivity(), container.getview_text(),container.getcolor_text(),container.getcolor_bg(),container.gettext_size(),setparams(container.getwidth(), container.getheight(), container.getmargins())); ll.addview(cb); cb.setoncheckedchangelistener(new oncheckedchangelistener() { @override public void oncheckedchanged(compoundbutton buttonview, boolean ischecked) { if(ischecked == true){ toast.maketext(getactivity(), "true", toast.length_short).show(); }else{ toast.maketext(getactivity(), "false", toast.length_short).show(); } } }); } else if(container.getview_type().equals("autocompleteselectwidget")){ autocompletetextview atv=(autocompletetextview) widget.createautocompleteedittext(getactivity(), container.getview_hint(), container.gethint_color(), container.getcolor_text(), container.getcolor_bg(), container.getinputtype(), setparams(container.getwidth(), container.getheight(), container.getmargins()),container.getthreshold()); atv.addtextchangedlistener(new textwatcher() { @override public void ontextchanged(charsequence s, int start, int before, int count) { if(container.getsearch_type().equals("trip")){ toast.maketext(getactivity(), ""+s.tostring(), toast.length_short).show(); } } @override public void beforetextchanged(charsequence s, int start, int count, int after) { // todo auto-generated method stub } @override public void aftertextchanged(editable s) { // todo auto-generated method stub } }); ll.addview(atv); } return ll; }
the reason because calling createform()
inside createform()
. causes program go in endless (infinite) loop, hence stackoverflow
exception.
take here:
Comments
Post a Comment