获取TableLayout中的所有TableRow

时间:2022-11-08 15:22:38

I've been looking for hours on how to get all TableRow's in a TableLayout. I already know how to add and delete rows dynamically, but I need to loop over all the rows and selectively delete some of them.

我一直在寻找如何在TableLayout中获取所有TableRow的时间。我已经知道如何动态添加和删除行,但我需要遍历所有行并有选择地删除其中的一些行。

I think I can come up with a work around, but I'm trying to avoid crude hacks in my app.

我想我可以提出一个解决方案,但我正试图避免在我的应用程序中粗暴的黑客攻击。

5 个解决方案

#1


44  

Have you tried using getChildCount() and getChildAt(int) respectively?

您是否尝试过分别使用getChildCount()和getChildAt(int)?

Should be fairly easy in a loop:

在循环中应该相当容易:

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

#2


15  

if you have other type view

如果你有其他类型的视图

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

#3


2  

I have been looking for the same thing for a while. For me, I was looking to how to check views in my table layout. I did this by:

我一直在寻找相同的东西。对我来说,我正在寻找如何检查表格布局中的视图。我是这样做的:

    //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.
        }
    }

#4


0  

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

#5


0  

If you try to remove TableRows the ID Counter will decrease so pls use this loop for removing ... else if you dont want to remove you can use some of the loops above :D

如果你试图删除TableRows,ID计数器将减少所以请使用此循环删除...否则如果你不想删除你可以使用上面的一些循环:D

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

This clears all rows!

这清除了所有行!

I think your main problem is if you remove rows that all rows will be newly placed so that the row with the ID = 5 is now ID = 4 if you delete the row with ID = 3

我认为你的主要问题是如果删除所有行将被新放置的行,以便ID = 5的行现在ID = 4,如果删除ID = 3的行

so maybe you have to reset the counter and iterate again or you generate the table new after you cleared all rows

所以也许你必须重置计数器并再次迭代,或者在清除所有行后生成新表

#1


44  

Have you tried using getChildCount() and getChildAt(int) respectively?

您是否尝试过分别使用getChildCount()和getChildAt(int)?

Should be fairly easy in a loop:

在循环中应该相当容易:

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

#2


15  

if you have other type view

如果你有其他类型的视图

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

#3


2  

I have been looking for the same thing for a while. For me, I was looking to how to check views in my table layout. I did this by:

我一直在寻找相同的东西。对我来说,我正在寻找如何检查表格布局中的视图。我是这样做的:

    //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.
        }
    }

#4


0  

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

#5


0  

If you try to remove TableRows the ID Counter will decrease so pls use this loop for removing ... else if you dont want to remove you can use some of the loops above :D

如果你试图删除TableRows,ID计数器将减少所以请使用此循环删除...否则如果你不想删除你可以使用上面的一些循环:D

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

This clears all rows!

这清除了所有行!

I think your main problem is if you remove rows that all rows will be newly placed so that the row with the ID = 5 is now ID = 4 if you delete the row with ID = 3

我认为你的主要问题是如果删除所有行将被新放置的行,以便ID = 5的行现在ID = 4,如果删除ID = 3的行

so maybe you have to reset the counter and iterate again or you generate the table new after you cleared all rows

所以也许你必须重置计数器并再次迭代,或者在清除所有行后生成新表