Programically add button on android -


i facing problem when try add scrollview linearlayout app terminate.

public class dynamicbuttonadd extends appcompatactivity {      @override     protected void oncreate(bundle savedinstancestate) {         super.oncreate(savedinstancestate);          button b1=new button(getbasecontext());         b1.settext("button 1");          button b2=new button(getbasecontext());         b2.settext("button 2");          button b3=new button(getbasecontext());         b3.settext("button 3");          button b4=new button(getbasecontext());         b4.settext("button 4");          button b5=new button(getbasecontext());         b5.settext("button 5");          button b6=new button(getbasecontext());         b6.settext("button 6");          button b7=new button(getbasecontext());         b7.settext("button 7");          button b8=new button(getbasecontext());         b8.settext("button 8");          button b9=new button(getbasecontext());         b9.settext("button 9");          button b10=new button(getbasecontext());         b10.settext("button 10");          button b11=new button(getbasecontext());         b11.settext("button 1");          button b12=new button(getbasecontext());         b12.settext("button 12");          tablelayout.layoutparams l=new tablelayout.layoutparams();         l.width= l.height=toolbar.layoutparams.wrap_content;          b1.setlayoutparams(l);          b2.setlayoutparams(l);         b3.setlayoutparams(l);         b4.setlayoutparams(l);         b5.setlayoutparams(l);         b6.setlayoutparams(l);         b7.setlayoutparams(l);         b8.setlayoutparams(l);         b9.setlayoutparams(l);         b10.setlayoutparams(l);         b11.setlayoutparams(l);         b12.setlayoutparams(l);          scrollview sv=new scrollview(getbasecontext());         sv.setfillviewport(true);           linearlayout linear=new linearlayout(getbasecontext());          sv.addview(linear);// error appear here if comment line works fine without scroll         linear.setorientation(linearlayout.vertical);         linear.setgravity(gravity.center);          linear.addview(b1);         linear.addview(b2);         linear.addview(b3);         linear.addview(b4);         linear.addview(b5);         linear.addview(b6);         linear.addview(b7);         linear.addview(b8);         linear.addview(b9);         linear.addview(b10);         linear.addview(b11);         linear.addview(b12);           setcontentview(linear);         b1.setonclicklistener(new view.onclicklistener() {             @override             public void onclick(view view) {                 toast.maketext(getbasecontext(),"clicked",toast.length_short).show();             }         });      } } 

the exception shown :

08-08 16:42:39.140 26674-26674/com.example.sid.test d/androidruntime: shutting down vm 08-08 16:42:39.140 26674-26674/com.example.sid.test w/dalvikvm: threadid=1: thread exiting uncaught exception (group=0xb60ab4f0) 08-08 16:42:39.144 26674-26674/com.example.sid.test e/androidruntime: fatal exception: main                                                                       java.lang.runtimeexception: unable start activity componentinfo{com.example.sid.test/com.example.sid.test.dynamicbuttonadd}: java.lang.illegalstateexception: specified child has parent. must call removeview() on child's parent first.                                                                           @ android.app.activitythread.performlaunchactivity(activitythread.java:1647)                                                                           @ android.app.activitythread.handlelaunchactivity(activitythread.java:1663)                                                                           @ android.app.activitythread.access$1500(activitythread.java:117)                                                                           @ android.app.activitythread$h.handlemessage(activitythread.java:931)                                                                           @ android.os.handler.dispatchmessage(handler.java:99)                                                                           @ android.os.looper.loop(looper.java:130)                                                                           @ android.app.activitythread.main(activitythread.java:3683)                                                                           @ java.lang.reflect.method.invokenative(native method)                                                                           @ java.lang.reflect.method.invoke(method.java:507)                                                                           @ com.android.internal.os.zygoteinit$methodandargscaller.run(zygoteinit.java:839)                                                                           @ com.android.internal.os.zygoteinit.main(zygoteinit.java:597)                                                                           @ dalvik.system.nativestart.main(native method)                                                                        caused by: java.lang.illegalstateexception: specified child has parent. must call removeview() on child's parent first.                                                                           @ android.view.viewgroup.addviewinner(viewgroup.java:1976)                                                                           @ android.view.viewgroup.addview(viewgroup.java:1871)                                                                           @ android.view.viewgroup.addview(viewgroup.java:1828)                                                                           @ android.view.viewgroup.addview(viewgroup.java:1808)                                                                           @ android.support.v7.app.appcompatdelegateimplv7.setcontentview(appcompatdelegateimplv7.java:271)                                                                           @ android.support.v7.app.appcompatactivity.setcontentview(appcompatactivity.java:145)                                                                           @ com.example.sid.test.dynamicbuttonadd.oncreate(dynamicbuttonadd.java:106)                                                                           @ android.app.instrumentation.callactivityoncreate(instrumentation.java:1047)                                                                           @ android.app.activitythread.performlaunchactivity(activitythread.java:1611)                                                                           @ android.app.activitythread.handlelaunchactivity(activitythread.java:1663)                                                                            @ android.app.activitythread.access$1500(activitythread.java:117)                                                                            @ android.app.activitythread$h.handlemessage(activitythread.java:931)                                                                            @ android.os.handler.dispatchmessage(handler.java:99)                                                                            @ android.os.looper.loop(looper.java:130)                                                                            @ android.app.activitythread.main(activitythread.java:3683)                                                                            @ java.lang.reflect.method.invokenative(native method)                                                                            @ java.lang.reflect.method.invoke(method.java:507)                                                                            @ com.android.internal.os.zygoteinit$methodandargscaller.run(zygoteinit.java:839)                                                                            @ com.android.internal.os.zygoteinit.main(zygoteinit.java:597)                                                                            @ dalvik.system.nativestart.main(native method)  

i not bother procedure, if useful scheme know please tell me. 1 more thing minimum api level 8 (android 2.2) thank you.

there problems code. 1 thats causing crash adding linearlayout scrollview , calling setcontentview(linear) i.e. adding linearlayout both activity , scrollview. wished set scrollview content. hence, simple fix is:

scrollview sv=new scrollview(getbasecontext()); sv.setfillviewport(true);  linearlayout linear=new linearlayout(getbasecontext()); sv.addview(linear); ... setcontentview(sv); // have linear here 

secondly, problem is:

tablelayout.layoutparams l=new tablelayout.layoutparams(); l.width= l.height=toolbar.layoutparams.wrap_content; 

you setting layoutparam button instances being added linearlayout. should set layout params of parent viewgroup here:

linearlayout.layoutparams l=new linearlayout.layoutparams(); l.width = l.height = linearlayout.layoutparams.wrap_content; 

thirdly, have slight feeling (and might wrong since don't know true use case), can move @ least of layout description , xml file


Comments