Java 由于父项未知,无法添加视图?
我正在尝试创建一个表。但是,每次加载应用程序时,行数都会有所不同,因此我会通过编程方式添加它们。除了主布局之外,行还有自己的xml布局。但是,当尝试在主布局中将行添加到tableview时,我得到一个错误(tableLayou.addView(行))。这是我的密码:Java 由于父项未知,无法添加视图?,java,android,parent-child,Java,Android,Parent Child,我正在尝试创建一个表。但是,每次加载应用程序时,行数都会有所不同,因此我会通过编程方式添加它们。除了主布局之外,行还有自己的xml布局。但是,当尝试在主布局中将行添加到tableview时,我得到一个错误(tableLayou.addView(行))。这是我的密码: private void makeTable() { View v = getLayoutInflater().inflate(R.layout.row, null); TableRow row; Autof
private void makeTable() {
View v = getLayoutInflater().inflate(R.layout.row, null);
TableRow row;
AutofitTextView textView;
Configuration configuration = getResources().getConfiguration();
int dip = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP,
(float) 1, getResources().getDisplayMetrics());
int width = (configuration.screenWidthDp/8)*dip;
int height = (configuration.screenHeightDp/10)*dip;
v.setBackgroundColor(getResources().getColor(R.color.black));
for (int i = 0; i<rowss.size();i++) {
row =(TableRow) v.findViewById(R.id.tableRow);
Scanner scanner = new Scanner(rowss.get(i));
while(scanner.hasNextLine()) {
Scanner s = new Scanner(scanner.nextLine());
AutofitTextView textView1 = (AutofitTextView) row.findViewById(R.id.manufacturer);
textView1.setText(s.next());
}
tableLayout.addView(row);
}
}
首先。你在这里的目标是什么?是否要将TableLayout用作列表?如果是这样的话,您可以也应该使用ListView 使用ListView的目的是能够扩展到更大的数据集 不必为所有项目创建和布局视图 在前面 目前的问题是,每次运行循环时,都会不断向TableLayout添加相同的对象
row =(TableRow) v.findViewById(R.id.tableRow);
...
tableLayout.addView(row);
由于它已经存在,它抛出“指定的子级已经有父级”。您必须首先对子级的父级调用removeView()
您可以使用一个ArrayAdapter,其中包含您创建的所有TableRow视图,并按如下方式添加它们:
int count = adapter.getCount();
for (int i = 0; i < count; i++) {
tableLayout.addView(createTableRow(adapter.getItem(i)); // or tableLayout.addView(adapter.getView(i, null, tableLayout));
}
int count=adapter.getCount();
for(int i=0;i
总的来说,您的table_row.xml似乎是列表中的一个条目,其中包含制造商、id等。
您可以切换ListView的TableLayout(它是处理行中嵌套数据的适当元素)
及
不管怎样,我都很乐意帮你。
首先,您的目标是什么?您希望将TableLayout用作列表?如果是,您可以并且应该使用ListView 使用ListView的目的是能够扩展到更大的数据集 不必为所有项目创建和布局视图 在前面 目前的问题是,每次运行循环时,都会不断向TableLayout添加相同的对象
row =(TableRow) v.findViewById(R.id.tableRow);
...
tableLayout.addView(row);
由于它已经存在,它抛出“指定的子项已经有父项。您必须首先对子项的父项调用removeView()”您可以使用一个ArrayAdapter,其中包含您创建的所有TableRow视图,并按如下方式添加它们:
int count = adapter.getCount();
for (int i = 0; i < count; i++) {
tableLayout.addView(createTableRow(adapter.getItem(i)); // or tableLayout.addView(adapter.getView(i, null, tableLayout));
}
int count=adapter.getCount();
for(int i=0;i
总的来说,您的table_row.xml似乎是列表中的一个条目,其中包含制造商、id等。
您可以切换ListView的TableLayout(它是处理行中嵌套数据的适当元素)
及
不管怎样,我都很乐意帮你。
问候,
int count = adapter.getCount();
for (int i = 0; i < count; i++) {
tableLayout.addView(createTableRow(adapter.getItem(i)); // or tableLayout.addView(adapter.getView(i, null, tableLayout));
}