通过TableLayout中的代码插入tablerow时获取异常

时间:2011-12-12 12:45:11

标签: android android-layout android-tablelayout

我正在尝试从TableLayout中的代码中插入行。我有几个关于互联网和stackOverflow的教程,以及每次我得到这个例外的一些方法。

12-12 17:54:07.027: E/AndroidRuntime(1295): Caused by: java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first.

12-12 17:54:07.027: E/AndroidRuntime(1295):     at com.kaushik.TestActivity.onCreate(TestActivity.java:41)

这是activityclass:

public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        /* Find Tablelayout defined in main.xml */
        TableLayout tl = (TableLayout) findViewById(R.id.myTableLayout);
        /* Create a new row to be added. */
        TableRow tr = new TableRow(this);
        tr.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT,
                LayoutParams.WRAP_CONTENT));
        /* Create a Button to be the row-content. */
        Button b = new Button(this);
        b.setText("Dynamic Button");
        b.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT,
                LayoutParams.WRAP_CONTENT));
        /* Add Button to row. */
        tr.addView(b);
        /* Add row to TableLayout. */
        tl.addView(tr, new TableLayout.LayoutParams(LayoutParams.FILL_PARENT,
                LayoutParams.WRAP_CONTENT));

        /* adding another row */
        TableRow tr2 = new TableRow(this);
        tr2.addView(b); // Exception is here
        tl.addView(tr2, new TableLayout.LayoutParams(LayoutParams.FILL_PARENT,
                LayoutParams.WRAP_CONTENT));
    }

这是XML

<?xml version="1.0" encoding="utf-8"?>
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
 android:id="@+id/myTableLayout"
   android:layout_width="fill_parent"
   android:layout_height="fill_parent"
   >
</TableLayout>

请帮帮我。

1 个答案:

答案 0 :(得分:0)

你做错了

 /* adding another row */
 TableRow tr2 = new TableRow(this);
 tr2.addView(b); // Exception is here

B是一个按钮,因为它已经添加到您的表第1行“t1”中。由于按钮是一个视图,每个视图只能由一个父级保持。按钮b已显示在第1行。它可以在第2行再次显示。

由于用户点击按钮或 row1 row2 时没有逻辑,那么如何知道按下了哪个按钮?我的意思是你不知道它被第1行或第2行按下。所以这是你正在做的意外事情。

onClick(View view){
   if(view == b){
       // So you cant do that this is button row1 button or row2 button.
   }

   // Or you can check the pressed button by id which will also be same. 

}
  

所以你应该创建新的Button button2,然后添加到row2。