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.

Nick Betcher
fonte

Respostas:

199
viewGroup.removeAllViews()

funciona para qualquer viewGroup. no seu caso é GridView.

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

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

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