在for循环中以编程方式将AddView添加到TableRow

时间:2014-10-31 16:26:37

标签: android android-layout android-view android-tablelayout

我被困了大约2个小时,以便尝试创建一个TableRow,它是多个有效的布局。我的代码看起来像这样:

LayoutInflater inflater = LayoutInflater.from(this);
TableLayout tblLayout = inflater.inflate(R.layout.tblL,parent,false);
TableRow tableRow = (TableRow) tblListItems.findViewById(R.id.tableRow );
View headerCell = inflater.inflate(R.layout.header_col,tblListItems,false);
TextView tvCellName = (TextView) headerCell.findViewById(R.id.tvCellName);

    for(String item: items) {

        tvCellName.setText(item);

        tableRow.addView(tvCellName);
    }

relativeLayout2.addView(tblLayout);

我得到的错误:

The specified child already has a parent. You must call removeView() on the child's parent first.

我做错了什么,我该怎么做?

1 个答案:

答案 0 :(得分:1)

视图只能有一个父级。您试图一遍又一遍地添加相同的视图。

for(String item: items) {

    tvCellName.setText(item);

    tableRow.addView(tvCellName); // this will add the same view.
}

如果您想要添加另一个视图,则需要在for内动态创建视图,而不是对其进行充气,例如:

tvCellName = new TextView(this);//this creates a new view, that doesn't have a parent.

修改

在for:

中夸大您的观点
 View headerCell;
 TextView tvCellName;
 for(String item: items) {
        headerCell = inflater.inflate(R.layout.header_col,tblListItems,false);
        tvCellName = (TextView) headerCell.findViewById(R.id.tvCellName);
        tvCellName.setText(item);
        tableRow.addView(tvCellName);
    }