无法将TextView添加到新的TableRow(指定的子项已经有父项)

时间:2014-04-25 10:32:31

标签: android tablelayout tablerow

我尝试将新的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>

有人知道如何解决这个问题吗?

由于

2 个答案:

答案 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);
}

但是,我想知道它为什么以前没有工作。