web-dev-qa-db-fra.com

Obtenez tous les TableRow dans une TableLayout

Je cherche depuis des heures à obtenir toutes les TableRow dans une TableLayout. Je sais déjà comment ajouter et supprimer des lignes de manière dynamique, mais je dois parcourir toutes les lignes et en supprimer certaines de manière sélective.

Je pense que je peux trouver un moyen de contourner le problème, mais j'essaie d'éviter les piratages grossiers dans mon application.

27
eugene

Avez-vous essayé d'utiliser getChildCount() et getChildAt(int) respectivement?

Devrait être assez facile dans une boucle:

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);
        }
    }
}
48
Quintin Robinson

si vous avez une autre vue de type

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

Je cherche la même chose depuis un moment. Pour moi, je cherchais comment vérifier les vues dans la disposition de mon tableau. Je l'ai fait par:

    //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.
        }
    }
2
Jason Cidras

Si vous essayez de supprimer TableRows, le compteur d'ID diminuera afin que les pls utilisent cette boucle pour supprimer ... sinon, si vous ne souhaitez pas supprimer, vous pouvez utiliser certaines des boucles ci-dessus: 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);
        }        
    }

Cela efface toutes les lignes! 

Je pense que votre principal problème est que si vous supprimez des lignes, toutes les lignes seront nouvellement placées de sorte que la ligne avec l'ID = 5 soit maintenant ID = 4 si vous supprimez la ligne avec l'ID = 3

alors peut-être que vous devez réinitialiser le compteur et itérer à nouveau ou vous générez la table new après avoir effacé toutes les lignes 

1
Code.IT
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);
    }
}
0
SuSh