2011-11-05 11 views
74

Come rimuovere tutte le viste figlio da un widget? Ad esempio, ho un GridView e io gonfio dinamicamente molti altri LinearLayouts in esso; più avanti nella mia applicazione sto cercando di iniziare con GridView e cancellare tutte le sue viste secondarie. Come lo farei? TIA.Rimozione di tutte le viste figlio dalla vista

risposta

143
viewGroup.removeAllViews() 

funziona per qualsiasi gruppo di viste. nel tuo caso è GridView.

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

+0

Grazie per l'aiuto! –

+4

In realtà removeAllViews() genera un'eccezione quando viene chiamato su GridView. Da Documenti: "Questo metodo non è supportato e genera un UnsupportedOperationException quando viene chiamato." – Moritz

+0

Questo commento si applica alla classe base astratta da cui è derivato ViewGroup. ViewGroup stesso e tutte le sue classi derivate supportano removeAllViews. –

11

È possibile rimuovere solo alcuni tipi di vista in un ViewGroup con questa funzione:

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

Abbassato perché l'OP non ha chiesto come rimuovere diversi tipi di viste secondarie. L'OP voleva rimuovere tutte le viste secondarie. – protectedmember

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

Prova questa

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

Questo codice sta lavorando per me.

Problemi correlati