如何在代码中引用TableLayout单元格

时间:2010-08-21 07:52:07

标签: android

我在我的xml中定义了一个TableLayout,它有三列,四行加上一个标题行。 每列包含一个TextView。

    <TableLayout
    android:id="@+id/inventory"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:stretchColumns="*"
    <TableRow>
        <TextView
            android:text="Item"/>
        <TextView
            android:text="Quantity"/>
        <TextView
            android:text="Units"/>
    </TableRow>
    <TableRow>
        <TextView
            android:id="@+id/inventorycell10"
        <TextView
            android:id="@+id/inventorycell11"
        <TextView
            android:id="@+id/inventorycell12"
    </TableRow>
    <TableRow>
        <TextView
            android:id="@+id/inventorycell20"
        <TextView
            android:id="@+id/inventorycell21"
        <TextView
            android:id="@+id/inventorycell22"
    </TableRow>
    <TableRow>
        <TextView
            android:id="@+id/inventorycell30"
        <TextView
            android:id="@+id/inventorycell31"
        <TextView
            android:id="@+id/inventorycell32"
    </TableRow>
    <TableRow>
        <TextView
            android:id="@+id/inventorycell40"
        <TextView
            android:id="@+id/inventorycell41"
        <TextView
            android:id="@+id/inventorycell42"
    </TableRow>
</TableLayout>

有没有办法在代码中引用TextViews,而无需单独识别它们。我在想可能会从tableview获取row / col视图。

-Frink

3 个答案:

答案 0 :(得分:5)

您可以使用ViewGroup#getChildAtViewGroup#getChildCount。您的根getChildAt上的TableLayout将允许您获取TableRow,然后在TableRow上调用它将允许您访问TextView

答案 1 :(得分:0)

假设每行的列数相同, 这个简单的方法应该可以解决问题:

private View getCellAtPos(TableLayout table, int pos) {
    TableRow row = (TableRow) table.getChildAt(pos / NUMBER_OF_COLUMNS);
    return row.getChildAt(pos % NUMBER_OF_COLUMNS);
}

答案 2 :(得分:0)

我喜欢marmor解决这个问题的方法。我为自己的项目做了一些修改。我用它来过滤掉表格布局的所有textviews,而不管列数或行数。这是代码:

TableLayout tableLayout = getView().findViewById(R.id.tableStats);
ArrayList<TextView> textViews = new ArrayList<>();
for(int i = 0; i < tableLayout.getChildCount(); i++){
    TableRow tableRow = (TableRow) tableLayout.getChildAt(i);
    for(int j = 0; j < tableRow.getChildCount(); j++){
        View tempView = tableRow.getChildAt(j);
        if(tempView instanceof TextView){
            textViews.add((TextView) tempView);
        }
    }
}