Получить все TableRow в TableLayout - PullRequest
27 голосов
/ 25 июля 2010

Я часами искал, как получить все TableRow в TableLayout.Я уже знаю, как добавлять и удалять строки динамически, но мне нужно перебрать все строки и выборочно удалить некоторые из них.избежать грубых взломов в моем приложении.

Ответы [ 5 ]

49 голосов
/ 25 июля 2010

Вы пытались использовать 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);
        }
    }
}
15 голосов
/ 13 ноября 2013

если у вас есть другой тип просмотра

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);
        }
    }
}
2 голосов
/ 25 июня 2013

Я давно искал то же самое.Для меня я искал, как проверить представления в макете таблицыЯ сделал это:

    //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.
        }
    }
1 голос
/ 06 марта 2015

Если вы попытаетесь удалить TableRows, счетчик идентификаторов уменьшится, поэтому используйте этот цикл для удаления ... в противном случае, если вы не хотите удалять, вы можете использовать некоторые из указанных выше циклов: 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

так что, возможно, вам придется сбросить счетчик и выполнить итерацию снова, или вы создадите новую таблицу после очистки всех строк

0 голосов
/ 03 января 2013
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);
    }
}
...