我在我的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
答案 0 :(得分:5)
您可以使用ViewGroup#getChildAt
和ViewGroup#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);
}
}
}