2013-04-13 67 views
0
public class MainActivity extends Activity implements View.OnClickListener { 
    int i, j, butNum, lay1num = 1, lay2num = 100, lay3num = 100, store; 
    Button[] Button; 
    EditText numBut; 
    LinearLayout mainLayout; 
    LinearLayout[] subLayout; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     butNum = 5; 
     Button = new Button[butNum]; 
     subLayout = new LinearLayout[3]; 
     LinearLayout mainLayout = new LinearLayout(this); 
     mainLayout.setOrientation(LinearLayout.HORIZONTAL); 
     mainLayout.setWeightSum(90); 
     mainLayout.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, 
       LayoutParams.MATCH_PARENT)); 

     subLayout[0] = new LinearLayout(this); 
     subLayout[0].setOrientation(LinearLayout.VERTICAL); 
     subLayout[0].setLayoutParams(new LayoutParams(
       LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT, 30)); 
     subLayout[0].setGravity(Gravity.CENTER_HORIZONTAL); 
     subLayout[1] = new LinearLayout(this); 
     subLayout[1].setOrientation(LinearLayout.VERTICAL); 
     subLayout[1].setLayoutParams(new LayoutParams(
       LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT, 30)); 
     subLayout[2] = new LinearLayout(this); 
     subLayout[2].setOrientation(LinearLayout.VERTICAL); 
     subLayout[2].setLayoutParams(new LayoutParams(
       LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT, 30)); 
     subLayout[0].setGravity(0x10); 
     for (i = 0; i < 3; i++) { 
      for (j = 0; j < butNum; j++) { 
       int value = j + 1; 
       Button[j] = new Button(this); 
       Button[j].setText("" + value); 
       Button[j].setLayoutParams(new LayoutParams(
         LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT)); 
       Button[j].setTextSize(20); 
       Button[j].setWidth(100 + j * 20); 
       Button[j].setTag(value); 
       Button[j].setId(j); 
       subLayout[i].addView(Button[j]); 
       Button[j].setOnClickListener(this); 
      } 
     } 

     TextView text = new TextView(this); 
     text.setText("" + store); 
     subLayout[0].addView(text); 
     mainLayout.addView(subLayout[0]); 
     mainLayout.addView(subLayout[1]); 
     mainLayout.addView(subLayout[2]); 

     setContentView(mainLayout); 
    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     getMenuInflater().inflate(R.menu.activity_main, menu); 
     return true; 
    } 

    public void onClick(View v) { 
     // TODO Auto-generated method stub 
     LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(
       LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); 
     switch (v.getId()) { 
     case 0: 
      subLayout[0].addView(Button[0], layoutParams); 
      break; 
     } 

    } 

} 

我创造了用java三种布局,并将它们添加到mainlayout。活动开始时,我在第一个布局中添加了按钮。我想要做的是一个新的按钮添加到subLayout [1]当我们点击一​​个button.But当我运行它崩溃的程序(话说程序意外终止),当我点击button.The logcat的是:在运行时点击添加按钮?

04-14 03:52:39.174: D/AndroidRuntime(349): Shutting down VM 
04-14 03:52:39.174: W/dalvikvm(349): threadid=1: thread exiting with uncaught exception (group=0x4001d800) 
04-14 03:52:39.184: E/AndroidRuntime(349): FATAL EXCEPTION: main 
04-14 03:52:39.184: E/AndroidRuntime(349): java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first. 
04-14 03:52:39.184: E/AndroidRuntime(349): at android.view.ViewGroup.addViewInner(ViewGroup.java:1970) 
04-14 03:52:39.184: E/AndroidRuntime(349): at android.view.ViewGroup.addView(ViewGroup.java:1865) 
04-14 03:52:39.184: E/AndroidRuntime(349): at android.view.ViewGroup.addView(ViewGroup.java:1845) 
04-14 03:52:39.184: E/AndroidRuntime(349): at com.creos.towerofhanoi.MainActivity.onClick(MainActivity.java:85) 
04-14 03:52:39.184: E/AndroidRuntime(349): at android.view.View.performClick(View.java:2408) 
04-14 03:52:39.184: E/AndroidRuntime(349): at android.view.View$PerformClick.run(View.java:8816) 
04-14 03:52:39.184: E/AndroidRuntime(349): at android.os.Handler.handleCallback(Handler.java:587) 
04-14 03:52:39.184: E/AndroidRuntime(349): at android.os.Handler.dispatchMessage(Handler.java:92) 
04-14 03:52:39.184: E/AndroidRuntime(349): at android.os.Looper.loop(Looper.java:123) 
04-14 03:52:39.184: E/AndroidRuntime(349): at android.app.ActivityThread.main(ActivityThread.java:4627) 
04-14 03:52:39.184: E/AndroidRuntime(349): at java.lang.reflect.Method.invokeNative(Native Method) 
04-14 03:52:39.184: E/AndroidRuntime(349): at java.lang.reflect.Method.invoke(Method.java:521) 
04-14 03:52:39.184: E/AndroidRuntime(349): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868) 
04-14 03:52:39.184: E/AndroidRuntime(349): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626) 
04-14 03:52:39.184: E/AndroidRuntime(349): at dalvik.system.NativeStart.main(Native Method) 
+0

和它崩溃时的堆栈跟踪是? –

+0

为什么你要创建的整体布局在运行时的?如果你有一个固定的布局,为什么要在运行时创建它?好吧,我明白你的问题是动态添加另一个按钮,但你可以节省自己的编码处理的负荷,如果你只是把你的初始布局到XML文件。 – Squonk

+0

我需要动态创建和按钮,这就是为什么我用它 –

回答

0

我解决了它,最后我不得不指定的onclick里面的按钮参数。这是一个小错误

public void onClick(View v) { 
     // TODO Auto-generated method stub 

     switch (v.getId()) { 
     case 0: 

      Button[0] = new Button(this); 
      Button[0].setLayoutParams(new LayoutParams(
        LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT)); 
      subLayout[1].addView(Button[0]); 


      break; 
     } 

    }