0

LinearLayout 앱에 ScrollView를 추가하려고하면 문제가 발생합니다. 갑자기 종료됩니다.프로그래밍 방식으로 버튼을 android에 추가하십시오.

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);// the error appear here if I comment this 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(); 
      } 
     }); 
    } 
} 

표시되는 예외 :

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 with 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 to start activity ComponentInfo{com.example.sid.test/com.example.sid.test.DynamicButtonAdd}: java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first. 
                      at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1647) 
                      at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1663) 
                      at android.app.ActivityThread.access$1500(ActivityThread.java:117) 
                      at android.app.ActivityThread$H.handleMessage(ActivityThread.java:931) 
                      at android.os.Handler.dispatchMessage(Handler.java:99) 
                      at android.os.Looper.loop(Looper.java:130) 
                      at android.app.ActivityThread.main(ActivityThread.java:3683) 
                      at java.lang.reflect.Method.invokeNative(Native Method) 
                      at java.lang.reflect.Method.invoke(Method.java:507) 
                      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839) 
                      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597) 
                      at dalvik.system.NativeStart.main(Native Method) 
                     Caused by: java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first. 
                      at android.view.ViewGroup.addViewInner(ViewGroup.java:1976) 
                      at android.view.ViewGroup.addView(ViewGroup.java:1871) 
                      at android.view.ViewGroup.addView(ViewGroup.java:1828) 
                      at android.view.ViewGroup.addView(ViewGroup.java:1808) 
                      at android.support.v7.app.AppCompatDelegateImplV7.setContentView(AppCompatDelegateImplV7.java:271) 
                      at android.support.v7.app.AppCompatActivity.setContentView(AppCompatActivity.java:145) 
                      at com.example.sid.test.DynamicButtonAdd.onCreate(DynamicButtonAdd.java:106) 
                      at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) 
                      at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1611) 
                      at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1663)  
                      at android.app.ActivityThread.access$1500(ActivityThread.java:117)  
                      at android.app.ActivityThread$H.handleMessage(ActivityThread.java:931)  
                      at android.os.Handler.dispatchMessage(Handler.java:99)  
                      at android.os.Looper.loop(Looper.java:130)  
                      at android.app.ActivityThread.main(ActivityThread.java:3683)  
                      at java.lang.reflect.Method.invokeNative(Native Method)  
                      at java.lang.reflect.Method.invoke(Method.java:507)  
                      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)  
                      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)  
                      at dalvik.system.NativeStart.main(Native Method)  

당신이 알고있는 유용한 기법이 제발 말해 만약 내가, 절차에 대해 걱정하고 있지 않다. 한 가지 더 최소 API 레벨은 8 (Android 2.2)입니다.

+0

모든 버튼을 초기화했으면 좋겠다. –

+0

아마 예외를 게시해야한다. 예외가 없으면 앱이 왜 추락했는지 알 수 없습니다. – JoxTraex

+0

질문을 편집 해주세요. –

답변

1

코드에 몇 가지 문제가 있습니다. 충돌을 일으키는 원인은 ScrollViewLinearLayout을 추가 한 다음 setContentView(linear)으로 전화하면 LinearLayout을 활동과 ScrollView에 모두 추가하는 것입니다. 콘텐츠로 ScrollView을 설정하기를 원했을 것입니다. 따라서, 간단한 수정은 다음과 같습니다

ScrollView sv=new ScrollView(getBaseContext()); 
sv.setFillViewport(true); 

LinearLayout linear=new LinearLayout(getBaseContext()); 
sv.addView(linear); 
... 
setContentView(sv); // you have linear here 

둘째, 문제는 :

TableLayout.LayoutParams l=new TableLayout.LayoutParams(); 
l.width= l.height=Toolbar.LayoutParams.WRAP_CONTENT; 

당신은 설정하고 이것을 LinearLayout에 추가되고 당신의 Button 인스턴스 LayoutParam. 당신은 적어도 일부를 이동할 수 있습니다, 나는 약간의 느낌이, 셋째

LinearLayout.LayoutParams l=new LinearLayout.LayoutParams(); 
l.width = l.height = LinearLayout.LayoutParams.WRAP_CONTENT; 

을 (내가 실제 사용 사례를 알고하지 않기 때문에 제가 틀릴 수도 있습니다) : 당신은 ViewGroup 여기에 부모의 레이아웃 PARAMS을 설정해야 이 레이아웃 설명과 XML 파일

+0

고마워요, 잘 작동합니다. 이런 종류의 것들을 동적으로 수행하는 것과 관련된 유용한 링크를 줄 수 있습니까? –

+0

나는 보통 다음과 같이 선호합니다 : D ... Chrome을 사용하는 경우 브라우저에서 Android 코드와 함께 잘 작동하는 플러그인 호출 'Codota'를 설치하고 Google 검색 등에서 예제를 보여줄 수도 있습니다. – Shaishav

관련 문제