TableLayout中的动态TableRow

时间:2013-06-14 03:46:39

标签: android tablelayout tablerow

有人可以告诉我为什么我的应用程序崩溃?当我添加1个tablerow时,一切顺利,但当我尝试添加超过1个表行时,我的应用程序crask

public void generaLayout(){
    TableLayout tabla = new TableLayout(this);

    for(int i = 0; i < 2; i++){
        row[i] = new TableRow(this);
        tabla.addView(row[i]);
        for(int j = 0; j < contador2; j++){
            row[i].addView(textArray[j]);
        }
    }

    layout.addView(tabla);
}
public void generaTextView(int i, String cad){
    textArray[i] = new TextView(this);
    textArray[i].setText(cad);


}

这是logcat 6-14 04:13:33.814:E / SurfaceFlinger(36):ro.sf.lcd_density必须定义为构建属性06-14 04:13:34.714:E / AndroidRuntime(3733):致命异常:主要06- 14 04:13:34.714:E / AndroidRuntime(3733):java.lang.IllegalStateException:指定的子节点已经有父节点。您必须首先在孩子的父母上调用removeView()。 06-14 04:13:34.714:E / AndroidRuntime(3733):在android.view.ViewGroup.addView(ViewGroup.java:3131)

1 个答案:

答案 0 :(得分:0)

好的,基于该日志。

我认为这是因为您将相同的TextView添加到不同的行,导致“指定的子节点已经有父节点”。例如,您正在添加textArray [0]到行0和1.第1行它会崩溃,因为该textview已经与第0行相关联。

您目前拥有一维TextView数组。并且您为每一行使用相同的数组。

如果要存储它们,则必须使用2D数组。 例如 textArray [i] [j]

您的生成必须更改为

public void generaTextView(int i, int j, String cad){
    textArray[i][j] = new TextView(this);
    textArray[i][j].setText(cad);


}

您还必须更改此

row[i].addView(textArray[j]);

row[i].addView(textArray[i][j]);