Alle untergeordneten Ansichten aus der Ansicht entfernen


111

Wie würde ich alle untergeordneten Ansichten aus einem Widget entfernen? Zum Beispiel habe ich eine GridView und fülle viele andere LinearLayouts dynamisch hinein. Später in meiner Anwendung möchte ich mit dieser GridView neu beginnen und alle untergeordneten Ansichten löschen. Wie würde ich das machen? TIA.

Antworten:


199
viewGroup.removeAllViews()

funktioniert für jede viewGroup. In Ihrem Fall ist es GridView.

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


5
Tatsächlich löst removeAllViews () beim Aufruf von GridView eine Ausnahme aus. Aus den Dokumenten: "Diese Methode wird nicht unterstützt und löst beim Aufruf eine UnsupportedOperationException aus."
Moritz

Dieser Kommentar gilt für die abstrakte Basisklasse, von der ViewGroup abgeleitet ist. ViewGroup selbst und alle abgeleiteten Klassen unterstützen removeAllViews.
Dale Wilson

Wie komme ich ViewGroup?
Nimmagadda Gowtham

@NimmagaddaGowtham Die meisten XxxLayout-Klassen (LinearLayout, RelativeLayout usw.) sind untergeordnete Klassen von ViewGroup. Wenn Sie eine davon haben, haben Sie bereits eine ViewGroup.
GrandOpener

14

Mit dieser Funktion können Sie nur einige Ansichtstypen in einer ViewGroup entfernen :

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
Abgestimmt, weil das OP nicht gefragt hat, wie verschiedene Arten von untergeordneten Ansichten entfernt werden sollen. Das OP wollte alle untergeordneten Ansichten entfernen.
Geschütztes

3

Versuche dies

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

Dieser Code funktioniert für mich.


0

Versuche dies

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);
        }
    }
}
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.