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.