12

我正在尝试以编程方式将视图添加到线性布局。

    LinearLayout layout     = (LinearLayout) findViewById(R.id.info);
    String [] informations  = topOffer.getInformations();
    TextView informationView;
    View line = new View(this);
    line.setLayoutParams(new LayoutParams(1, LayoutParams.FILL_PARENT));
    line.setBackgroundColor(R.color.solid_history_grey);
    for (int i = 0; i < informations.length; i++) {
        informationView = new TextView(this);
        informationView.setText(informations[i]);
        layout.addView(informationView, 0);
        layout.addView(line, 1);
    }

首先,我只添加了信息视图,一切正常。Butt 在添加 line-View 后,它崩溃并出现以下错误:

java.lang.IllegalStateException:指定的孩子已经有一个父母。您必须首先在孩子的父母上调用 removeView()。

所以我尝试了 addView(View v, int index),但它崩溃并显示相同的消息......

有人有解决办法吗?

谢谢,马丁

4

2 回答 2

12

正如 gpmoo7 所说,您每次都需要在循环中创建一个新视图

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(R.layout.linear);

    LinearLayout layout = (LinearLayout) findViewById(R.id.linear);

    String[] informations = new String[] { "one", "two", "three" };
    TextView informationView;

    for (int i = 0; i < informations.length; i++) {
        View line = new View(this);
        line.setLayoutParams(new LayoutParams(1, LayoutParams.MATCH_PARENT));
        line.setBackgroundColor(0xAA345556);
        informationView = new TextView(this);
        informationView.setText(informations[i]);
        layout.addView(informationView, 0);
        layout.addView(line, 1);
    }

}
于 2011-01-27T00:07:17.653 回答
2

您不能在同一个父视图中多次添加同一个子视图。您需要每次都创建一个新视图或扩充一个新视图。

于 2011-01-19T00:24:34.940 回答