Removendo Todas as Visualizações Filhas da Visualização


111

Como eu removeria todas as visualizações filhas de um widget? Por exemplo, eu tenho um GridView e inflam muitos outros LinearLayouts nele dinamicamente; posteriormente em meu aplicativo, estou procurando começar do zero com esse GridView e limpar todas as suas visualizações filhas. Como eu faria isso? TIA.

Respostas:


199
viewGroup.removeAllViews()

funciona para qualquer viewGroup. no seu caso é GridView.

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


5
Na verdade, removeAllViews () lança uma exceção quando chamado em GridView. Do Docs: "Este método não é compatível e lança uma UnsupportedOperationException quando chamado."
Moritz

Esse comentário se aplica à classe base abstrata da qual ViewGroup é derivado. O próprio ViewGroup e todas as suas classes derivadas oferecem suporte a removeAllViews.
Dale Wilson

Como obter ViewGroup?
Nimmagadda Gowtham

@NimmagaddaGowtham a maioria das classes XxxLayout (LinearLayout, RelativeLayout, etc.) são classes filhas de ViewGroup. Se você tiver um desses, já tem um ViewGroup.
GrandOpener

14

Você pode remover apenas alguns tipos de visualização em um ViewGroup com esta função:

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
Votos negados porque o OP não perguntou como remover diferentes tipos de visualizações filhas. O OP queria remover todas as visualizações filhas.
protegido de

3

Tente isto

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

Este código está funcionando para mim.


0

Tente isto

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);
        }
    }
}
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.