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.

Respuestas:


199
viewGroup.removeAllViews()

funciona para cualquier viewGroup. en su caso es GridView.

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


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;
        }
    }
}

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.


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);
        }
    }
}
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.