Suppression de toutes les vues enfants de la vue

111

Comment supprimer toutes les vues enfants d'un widget? Par exemple, j'ai un GridView et j'y gonfle dynamiquement de nombreux autres LinearLayouts; plus tard dans mon application, je cherche à repartir à neuf avec ce GridView et à effacer toutes ses vues enfants. Comment ferais-je ça? TIA.

Nick Betcher
la source

Réponses:

199
viewGroup.removeAllViews()

fonctionne pour n'importe quel viewGroup. dans votre cas, c'est GridView.

http://developer.android.com/reference/android/view/ViewGroup.html#removeAllViews ()

Yashwanth Kumar
la source
5
En fait, removeAllViews () lève une exception lorsqu'il est appelé sur GridView. Extrait de la documentation: «Cette méthode n'est pas prise en charge et lève une exception UnsupportedOperationException lorsqu'elle est appelée.»
Moritz
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.
Dale Wilson
Comment l'obtenir ViewGroup?
Nimmagadda Gowtham
@NimmagaddaGowtham la plupart des classes XxxLayout (LinearLayout, RelativeLayout, etc.) sont des classes enfants de ViewGroup. Si vous en avez un, vous avez déjà un ViewGroup.
GrandOpener
15

Vous ne pouvez supprimer que certains types de vue dans un 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;
        }
    }
}
TienLuong
la source
1
Voté à la baisse parce que le PO n'a pas demandé comment supprimer différents types de vues enfants. L'OP voulait supprimer toutes les vues enfants.
protectedmember
3

Essaye ça

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

Ce code fonctionne pour moi.

Gowthaman M
la source
0

Essaye ça

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);
        }
    }
}
kot32go
la source