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.