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.

Nick Betcher
quelle

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 ()

Yashwanth Kumar
quelle
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;
        }
    }
}
TienLuong
quelle
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.

Gowthaman M.
quelle
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);
        }
    }
}
kot32go
quelle