将数据分配给 TableLayout 在启动时实际崩溃应用程序
Assigning Data to TableLayout Pragmatically Crashes app when launching
我在 XML 中有一个 table 布局,其中有一行和三个文本视图。从数组中动态解析 table 中的数据,但是当我启动应用程序时它崩溃了。
这是我的代码
TableLayout historyEntries = (TableLayout)findViewById(R.id.DataTable);
historyEntries.setStretchAllColumns(true);
historyEntries.bringToFront();
for(int i = 0; i < dataArray.length; i++){
TableRow tr = (TableRow) findViewById(R.id.datarow);
TextView c1 = (TextView) findViewById(R.id.TextView1);
TextView c2 = (TextView) findViewById(R.id.TextView2);
TextView c3 = (TextView) findViewById(R.id.TextView3);
c1.setText(dataArray[i]);
c2.setText(String.valueOf(dataArray[i]));
c3.setText(String.valueOf(dataArray[i]));
tr.addView(c1);
tr.addView(c2);
tr.addView(c3);
historyEntries.addView(tr);
}
错误
java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first.
一个视图只能有一个父视图。根据 findViewById
调用判断,您的一个或所有视图可能有父视图。如果您的观点在 activity 中已经膨胀,只需删除这些行:
tr.addView(c1);
tr.addView(c2);
tr.addView(c3);
historyEntries.addView(tr);
否则,如果您打算添加更多行,可以使用 TableRow
和 TextView
创建单独的布局文件:
for (int i = 0; i < dataArray.length; i++){
View v = LayoutInflater.from(context).inflate(R.layout.your_table_row, historyEntries, false);
TableRow tr = (TableRow) v.findViewById(R.id.datarow);
TextView c1 = (TextView) v.findViewById(R.id.TextView1);
TextView c2 = (TextView) v.findViewById(R.id.TextView2);
TextView c3 = (TextView) v.findViewById(R.id.TextView3);
c1.setText(dataArray[i]);
c2.setText(String.valueOf(dataArray[i]));
c3.setText(String.valueOf(dataArray[i]));
historyEntries.addView(tr);
}
我在 XML 中有一个 table 布局,其中有一行和三个文本视图。从数组中动态解析 table 中的数据,但是当我启动应用程序时它崩溃了。 这是我的代码
TableLayout historyEntries = (TableLayout)findViewById(R.id.DataTable);
historyEntries.setStretchAllColumns(true);
historyEntries.bringToFront();
for(int i = 0; i < dataArray.length; i++){
TableRow tr = (TableRow) findViewById(R.id.datarow);
TextView c1 = (TextView) findViewById(R.id.TextView1);
TextView c2 = (TextView) findViewById(R.id.TextView2);
TextView c3 = (TextView) findViewById(R.id.TextView3);
c1.setText(dataArray[i]);
c2.setText(String.valueOf(dataArray[i]));
c3.setText(String.valueOf(dataArray[i]));
tr.addView(c1);
tr.addView(c2);
tr.addView(c3);
historyEntries.addView(tr);
}
错误
java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first.
一个视图只能有一个父视图。根据 findViewById
调用判断,您的一个或所有视图可能有父视图。如果您的观点在 activity 中已经膨胀,只需删除这些行:
tr.addView(c1);
tr.addView(c2);
tr.addView(c3);
historyEntries.addView(tr);
否则,如果您打算添加更多行,可以使用 TableRow
和 TextView
创建单独的布局文件:
for (int i = 0; i < dataArray.length; i++){
View v = LayoutInflater.from(context).inflate(R.layout.your_table_row, historyEntries, false);
TableRow tr = (TableRow) v.findViewById(R.id.datarow);
TextView c1 = (TextView) v.findViewById(R.id.TextView1);
TextView c2 = (TextView) v.findViewById(R.id.TextView2);
TextView c3 = (TextView) v.findViewById(R.id.TextView3);
c1.setText(dataArray[i]);
c2.setText(String.valueOf(dataArray[i]));
c3.setText(String.valueOf(dataArray[i]));
historyEntries.addView(tr);
}