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.