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
Post a Comment