Görünümden Tüm Alt Görünümleri Kaldırma


111

Bir widget'tan tüm alt görünümleri nasıl kaldırırım? Örneğin, bir GridView'ım var ve diğer birçok LinearLayout'u dinamik olarak içine şişiriyorum; Daha sonra uygulamamda bu GridView ile yeni bir başlangıç ​​yapmak ve tüm alt Görünümlerini temizlemek istiyorum. Bunu nasıl yaparım? TIA.

Yanıtlar:


199
viewGroup.removeAllViews()

herhangi bir viewGroup için çalışır. sizin durumunuzda GridView.

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


5
Aslında removeAllViews (), GridView'da çağrıldığında bir istisna atar. Dokümanlar'dan: "Bu yöntem desteklenmez ve çağrıldığında UnsupportedOperationException oluşturur."
— Moritz

Bu yorum, ViewGroup'un türetildiği soyut temel sınıf için geçerlidir. ViewGroup'un kendisi ve türetilmiş tüm sınıfları removeAllViews özelliğini destekler.
— Dale Wilson

Nasıl alınır ViewGroup?
— Nimmagadda Gowtham

@NimmagaddaGowtham çoğu XxxLayout sınıfı (LinearLayout, RelativeLayout, vb.) ViewGroup'un alt sınıflarıdır. Bunlardan birine sahipseniz, zaten bir ViewGroup'unuz var.
— GrandOpener

15

Bu işlevle bir Görünüm Grubundaki yalnızca bazı görünüm türlerini kaldırabilirsiniz :

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, farklı çocuk görüşlerinin nasıl kaldırılacağını sormadığı için olumsuz oy kullandı. OP, tüm çocuk görüşlerini kaldırmak istedi.
— korumalımember

3

Bunu dene

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

Bu kod benim için çalışıyor.


0

Bunu dene

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);
        }
    }
}
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.