Rimozione di tutte le viste figlio dalla vista


111

Come rimuoverei tutte le visualizzazioni figlio da un widget? Ad esempio, ho un GridView e ho gonfiato dinamicamente molti altri LinearLayouts; più tardi nella mia applicazione sto cercando di ricominciare da capo con quel GridView e cancellare tutte le sue viste figlio. Come lo farei? TIA.

Risposte:


199
viewGroup.removeAllViews()

funziona per qualsiasi viewGroup. nel tuo caso è GridView.

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


5
In realtà removeAllViews () genera un'eccezione quando viene chiamato su GridView. Dai documenti: "Questo metodo non è supportato e genera un'eccezione UnsupportedOperationException quando viene chiamato."
Moritz

Questo commento si applica alla classe base astratta da cui deriva ViewGroup. ViewGroup stesso e tutte le sue classi derivate supportano removeAllViews.
Dale Wilson

Come ottenerlo ViewGroup?
Nimmagadda Gowtham

@NimmagaddaGowtham la maggior parte delle classi XxxLayout (LinearLayout, RelativeLayout, ecc.) Sono classi figlie di ViewGroup. Se ne hai uno, hai già un ViewGroup.
GrandOpener

14

È possibile rimuovere solo alcuni tipi di visualizzazione in un ViewGroup con questa funzione:

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
Down-votato perché l'OP non ha chiesto come rimuovere diversi tipi di visualizzazioni figlio. L'OP voleva rimuovere tutte le visualizzazioni figlio.
protectedmember

3

Prova questo

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

Questo codice funziona per me.


0

Prova questo

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);
        }
    }
}
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.