Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/356.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 由于父项未知,无法添加视图?_Java_Android_Parent Child - Fatal编程技术网

Java 由于父项未知,无法添加视图?

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

我正在尝试创建一个表。但是,每次加载应用程序时,行数都会有所不同,因此我会通过编程方式添加它们。除了主布局之外,行还有自己的xml布局。但是,当尝试在主布局中将行添加到tableview时,我得到一个错误(tableLayou.addView(行))。这是我的密码:

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