117 votes

Suppression de toutes les vues enfant de la vue

Comment supprimer toutes les vues enfant d'un widget ? Par exemple, j'ai un GridView et je gonfle dynamiquement de nombreux autres LinearLayouts dans celui-ci. Plus tard dans mon application, je souhaite repartir de zéro avec ce GridView et effacer toutes ses vues enfant. Comment dois-je procéder ? TIA.

211voto

Yashwanth Kumar Points 12122

5 votes

En fait, removeAllViews() lève une exception lorsqu'il est appelé sur un GridView. Extrait de la documentation : "Cette méthode n'est pas supportée et lève une UnsupportedOperationException lorsqu'elle est appelée".

0 votes

Ce commentaire s'applique à la classe de base abstraite dont ViewGroup est dérivé. ViewGroup lui-même et toutes ses classes dérivées prennent en charge removeAllViews.

0 votes

Comment obtenir ViewGroup ?

15voto

TienLuong Points 31

Vous ne pouvez supprimer que certains types de vues dans une vue ViewGroup avec cette fonction :

private void clearImageView(ViewGroup v) {
    boolean doBreak = false;
    while (!doBreak) {
        int childCount = v.getChildCount();
        int i;
        for(i=0; i<childCount; i++) {
            View currentChild = v.getChildAt(i);
            // Change ImageView with your desired type view
            if (currentChild instanceof ImageView) {
                v.removeView(currentChild);
                break;
            }
        }

        if (i == childCount) {
            doBreak = true;
        }
    }
}

1 votes

Voté à la baisse parce que le PO n'a pas demandé comment supprimer différents types de vues enfant. Le PO voulait supprimer toutes les vues enfant.

3voto

Gowthaman M Points 4876

Essayez ceci

RelativeLayout  relativeLayout = findViewById(R.id.realtive_layout_root);
    relativeLayout.removeAllViews();

Ce code fonctionne pour moi.

0voto

kot32go Points 1

Essayez ceci

void removeAllChildViews(ViewGroup viewGroup) {
    for (int i = 0; i < viewGroup.getChildCount(); i++) {
        View child = viewGroup.getChildAt(i);
        if (child instanceof ViewGroup) {
            if (child instanceof AdapterView) {
                viewGroup.removeView(child);
                return;
            }
            removeAllChildViews(((ViewGroup) child));
        } else {
            viewGroup.removeView(child);
        }
    }
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X