我已经寻找了好几个小时关于如何获取TableLayout中所有TableRow的方法。我已经知道如何动态添加和删除行,但我现在需要循环遍历所有行并选择性地删除其中一些。
我认为我可以想出一个解决方法,但我试图避免在我的应用程序中使用粗糙的hack。
我已经寻找了好几个小时关于如何获取TableLayout中所有TableRow的方法。我已经知道如何动态添加和删除行,但我现在需要循环遍历所有行并选择性地删除其中一些。
我认为我可以想出一个解决方法,但我试图避免在我的应用程序中使用粗糙的hack。
你尝试使用 getChildCount()
和 getChildAt(int)
分别吗?
在循环中应该相当容易:
for(int i = 0, j = table.getChildCount(); i < j; i++) {
View view = table.getChildAt(i);
if (view instanceof TableRow) {
// then, you can remove the the row you want...
// for instance...
TableRow row = (TableRow) view;
if( something you want to check ) {
table.removeViewAt(i);
// or...
table.removeView(row);
}
}
}
TableLayout
的上下文中而不是使用视图的引用,只是提醒一下。最后一个注意事项是,在循环中实际删除集合中的项目时存在一些警告(索引重新计算等),所以请注意。 - Quintin RobinsonTableLayout
inherits a lot of methods, in particular getChildCount
and getChildAt
are inherited from android.view.ViewGroup
- lasec0203如果你有其他观点
TableLayout layout = (TableLayout) findViewById(R.id.IdTable);
for (int i = 0; i < layout.getChildCount(); i++) {
View child = layout.getChildAt(i);
if (child instanceof TableRow) {
TableRow row = (TableRow) child;
for (int x = 0; x < row.getChildCount(); x++) {
View view = row.getChildAt(x);
view.setEnabled(false);
}
}
}
我已经寻找同样的事情有一段时间了。对我来说,我正在寻找如何检查我的表格布局中的视图。我通过以下方式实现了这一点:
//This will iterate through your table layout and get the total amount of cells.
for(int i = 0; i < table.getChildCount(); i++)
{
//Remember that .getChildAt() method returns a View, so you would have to cast a specific control.
TableRow row = (TableRow) table.getChildAt(i);
//This will iterate through the table row.
for(int j = 0; j < row.getChildCount(); j++)
{
Button btn = (Button) row.getChildAt(j);
//Do what you need to do.
}
}
TableLayout table = (TableLayout) findViewById(R.id.tblScores);
for(int i = 0; i < table.getChildCount(); i = 0)
{
View child = table.getChildAt(0);
if (child != null && child instanceof TableRow)
{
TableRow row = (TableRow) child;
row.removeAllViews();
table.removeViewAt(i);
}
}
这将清除所有行!
我认为你的主要问题是,如果删除所有行,那么所有行将被重新放置,因此如果您删除ID = 3的行,则具有ID = 5的行现在将变为ID = 4
所以也许你需要重置计数器并再次迭代,或者在清除所有行后重新生成表格
for(int i = 0, j < table.getChildCount(); i < j; i++){
// then, you can remove the the row you want...
// for instance...
TableRow row = (TableRow) table.getChildAt(i);
if( something you want to check ) {
removeViewAt(i);
// or...
removeView(row);
}
}