Видалення всіх поглядів дитини з подання


111

Як я можу видалити всі дитячі представлення з віджета? Наприклад, у мене є GridView, і я динамічно надуваю в нього багато інших LinearLayouts; пізніше у своїй заявці я хочу почати свіжий із цим GridView та очистити всі його подання. Як би я це зробив? ТІА.

Відповіді:


199
viewGroup.removeAllViews()

працює для будь-якої групи перегляду. у вашому випадку це GridView.

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


5
Фактично removeAllViews () кидає виняток, коли викликається в GridView. З Документів: "Цей метод не підтримується і видає UnsupportedOperationException при виклику."
Моріц

Цей коментар стосується абстрактного базового класу, з якого походить ViewGroup. Сам ViewGroup та всі його похідні класи підтримують deleteAllViews.
Дейл Вілсон

Як дістатися ViewGroup?
Nimmagadda Gowtham

@NimmagaddaGowtham більшість класів XxxLayout (LinearLayout, RelativeLayout тощо) - це дочірні класи ViewGroup. Якщо у вас є одна з таких, у вас вже є ViewGroup.
GrandOpener

14

За допомогою цієї функції можна видалити лише деякі види подання в ViewGroup :

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
Оголошено, оскільки ОП не запитувало, як видалити різні типи дитячих поглядів. ОП хотіла прибрати всі дитячі погляди.
захищено

3

Спробуйте це

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

Цей код працює для мене.


0

Спробуйте це

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);
        }
    }
}
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.