我尝试将新的TableRows
添加到TableLayout
,但我甚至无法将TextView
添加到新的TableRow
对象中。但总有同样的错误:
04-25 12:11:42.329:E / AndroidRuntime(26636): java.lang.IllegalStateException:指定的子节点已经有了 家长。您必须首先在孩子的父母上调用removeView()。
这是主要代码:
public static class PlaceholderFragment extends Fragment {
protected TableLayout mTableLayout;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_results,
container, false);
mTableLayout = (TableLayout) rootView
.findViewById(R.id.results_table);
fullFillTable();
return rootView;
}
private void fullFillTable() {
TextView labelPosition = new TextView(getActivity());
TableRow row = new TableRow(getActivity());
labelPosition.setText("Pos");
row.addView(labelPosition); //The error is here
mTableLayout.addView(row);
}
}
这是fragment.xml
:
<TableLayout
android:id="@+id/results_table"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="@dimen/activity_vertical_margin"
android:layout_marginLeft="@dimen/activity_horizontal_margin"
android:layout_marginRight="@dimen/activity_horizontal_margin"
android:layout_marginTop="@dimen/activity_vertical_margin"
android:stretchColumns="*" >
<TableRow
android:id="@+id/results_titles_row"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#F7F7F7" >
<TextView
android:id="@+id/results_col1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/results_col1_title" />
<TextView
android:id="@+id/results_col2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/results_col2_title" />
<TextView
android:id="@+id/results_col3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/results_col3_title" />
<TextView
android:id="@+id/results_col4"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/results_col4_title" />
</TableRow>
</TableLayout>
有人知道如何解决这个问题吗?
由于
答案 0 :(得分:0)
您正在将labelPosition
添加到两个不同的视图中,这是错误的:
row.addView(labelPosition);
mTableLayout.addView(labelPosition);
相反,您应该将TextView
添加到TableRow
并将TablewRow
添加到TableLayout
,如下所示:
row.addView(labelPosition);
mTableLayout.addView(row);
答案 1 :(得分:0)
虽然不是我想要的方式,但我能够解决它。
创建row_layout.xml
文件:
<TableRow xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<TextView
android:id="@+id/col1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello world" />
</TableRow>
然后,给它充气:
private void fullFillTable() {
TableRow row;
row = (TableRow) View.inflate(getActivity(), R.layout.row_layout, null);
((TextView)row.findViewById(R.id.col1)).setText("Pos");
mTableLayout.addView(row);
}
但是,我想知道它为什么以前没有工作。