我正在尝试从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>
请帮帮我。
答案 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。