Eliminar todas las vistas secundarias de la vista

111

¿Cómo eliminaría todas las vistas secundarias de un widget? Por ejemplo, tengo un GridView e inflo dinámicamente muchos otros LinearLayouts en él; más adelante en mi aplicación, estoy buscando comenzar de nuevo con GridView y borrar todas sus vistas secundarias. ¿Cómo haría esto? TIA.

Nick Betcher
fuente

Respuestas:

199
viewGroup.removeAllViews()

funciona para cualquier viewGroup. en su caso es GridView.

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

Yashwanth Kumar
fuente
5
En realidad removeAllViews () arroja una excepción cuando se llama en GridView. De los Documentos: "Este método no es compatible y genera una UnsupportedOperationException cuando se llama".
Moritz
Ese comentario se aplica a la clase base abstracta de la que se deriva ViewGroup. ViewGroup en sí y todas sus clases derivadas admiten removeAllViews.
Dale Wilson
¿Cómo llegar ViewGroup?
Nimmagadda Gowtham
@NimmagaddaGowtham la mayoría de las clases de XxxLayout (LinearLayout, RelativeLayout, etc.) son clases secundarias de ViewGroup. Si tiene uno de esos, ya tiene un ViewGroup.
GrandOpener
15

Puede eliminar solo algunos tipos de vista en un ViewGroup con esta función:

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
fuente
1
Votó en contra porque el OP no preguntó cómo eliminar diferentes tipos de vistas secundarias. El OP quería eliminar todas las vistas secundarias.
protegido
3

Prueba esto

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

Este código me funciona.

Gowthaman M
fuente
0

Prueba esto

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
fuente