Android:以编程方式添加两个文本视图

时间:2010-07-09 07:24:50

标签: java android android-linearlayout

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

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

首先,我只添加了informationsView,一切正常。在添加了Line-View之后,它崩溃了,出现了以下错误:

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

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

有人有解决方案吗?

谢谢, 马丁

2 个答案:

答案 0 :(得分: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);
    }

}

答案 1 :(得分:2)

您无法在同一父视图中多次添加相同的子视图。 您需要每次都创建一个新视图或为新视图充气。