繁体   English   中英

获取TableLayout中的所有TableRow

[英]Get all TableRow's in a TableLayout

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

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

您是否尝试过分别使用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 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.
        }
    }

如果你试图删除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);
        }        
    }

这清除了所有行!

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM