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.

Jawaban:


199
viewGroup.removeAllViews()

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

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


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

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.


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);
        }
    }
}
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.