ビューからすべての子ビューを削除する


111

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

回答:


199
viewGroup.removeAllViews()

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

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


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

そのコメントは、ViewGroupの派生元の抽象基本クラスに適用されます。ViewGroup自体とそのすべての派生クラスは、removeAllViewsをサポートします。
デイルウィルソン

入手するにはViewGroup
Nimmagadda Gowtham 2015年

@NimmagaddaGowthamほとんどのXxxLayoutクラス(LinearLayout、RelativeLayoutなど)は、ViewGroupの子クラスです。それらのいずれかがある場合は、すでにViewGroupがあります。
GrandOpener 2016

14

次の関数を使用して、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;
        }
    }
}

1
OPが異なるタイプの子ビューを削除する方法を尋ねなかったため、反対票が投じられました。OPはすべての子ビューを削除したいと考えていました。
protectedmember

3

これを試して

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

このコードは私のために働いています。


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);
        }
    }
}
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.