Menghapus Semua Tampilan Anak dari Tampilan

111

Bagaimana cara menghapus semua tampilan anak dari widget? Misalnya, saya memiliki GridView dan saya secara dinamis mengembang banyak LinearLayouts lainnya ke dalamnya; kemudian di aplikasi saya, saya ingin memulai dengan GridView itu dan menghapus semua View anaknya. Bagaimana saya melakukan ini? TIA.

Nick Betcher
sumber

Jawaban:

199
viewGroup.removeAllViews()

berfungsi untuk semua viewGroup. dalam kasus Anda ini adalah GridView.

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

Yashwanth Kumar
sumber
5
Sebenarnya removeAllViews () melontarkan pengecualian saat dipanggil di GridView. Dari Dokumen: "Metode ini tidak didukung dan menampilkan UnsupportedOperationException saat dipanggil."
Moritz
Komentar tersebut berlaku untuk kelas dasar abstrak tempat ViewGroup diturunkan. ViewGroup itu sendiri dan semua kelas turunannya mendukung removeAllViews.
Dale Wilson
Bagaimana cara mendapatkannya ViewGroup?
Nimmagadda Gowtham
@NimmagaddaGowtham kebanyakan kelas XxxLayout (LinearLayout, RelativeLayout, dll.) Adalah kelas anak dari ViewGroup. Jika Anda memiliki salah satunya, Anda sudah memiliki ViewGroup.
GrandOpener
14

Anda hanya dapat menghapus beberapa tipe tampilan dalam ViewGroup dengan fungsi ini:

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
sumber
1
Tidak disukai karena OP tidak menanyakan cara menghapus berbagai jenis pandangan anak. OP ingin menghapus semua tampilan anak.
dilindungi anggota
3

Coba ini

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

Kode ini berfungsi untuk saya.

Gowthaman M
sumber
0

Coba ini

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
sumber