2011-11-05 4 views
74

ウィジェットからすべての子ビューを削除するにはどうすればよいですか?例えば、私はGridViewを持っており、他の多くのLinearLayoutsを動的に膨張させます。私のアプリケーションの後半で、GridViewで新しく始めて、すべての子ビューをクリアしたいと考えています。どうすればいい? TIA。ビューからすべての子ビューを削除する

答えて

143
viewGroup.removeAllViews() 

はどのviewGroupでも機能します。あなたの場合はGridViewです。

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

+0

ありがとうございました! –

+4

実際、removeAllViews()はGridViewで呼び出されたときに例外をスローします。ドキュメントから: "このメソッドはサポートされておらず、呼び出されるとUnsupportedOperationExceptionをスローします。" – Moritz

+0

このコメントは、ViewGroupが派生した抽象基本クラスに適用されます。 ViewGroup自体とその派生クラスはすべてremoveAllViewsをサポートします。 –

11

あなたはこの機能をのViewGroupにビューの唯一のいくつかのタイプを削除することができます

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

OPが異なるタイプの子ビューを削除する方法を尋ねなかったため、投票結果が下がった。 OPはすべての子ビューを削除したかった。 – 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

は、このコードは、のために働いているこの

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

をお試しください私。

関連する問題