Удаление всех дочерних представлений из представления

111

Как мне удалить все дочерние представления из виджета? Например, у меня есть GridView, и я динамически надуваю в него множество других LinearLayout; позже в своем приложении я хочу начать с этого GridView и очистить все его дочерние представления. Как бы я это сделал? TIA.

Ник Бетчер
источник

Ответы:

199
viewGroup.removeAllViews()

работает для любой viewGroup. в вашем случае это GridView.

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

Яшвант Кумар
источник
5
На самом деле removeAllViews () выдает исключение при вызове в GridView. Из документации: «Этот метод не поддерживается и при вызове выдает исключение UnsupportedOperationException».
Мориц
Этот комментарий относится к абстрактному базовому классу, производным от ViewGroup. Сама ViewGroup и все ее производные классы поддерживают removeAllViews.
Dale Wilson
Как добраться ViewGroup?
Nimmagadda Gowtham
@NimmagaddaGowtham большинство классов XxxLayout (LinearLayout, RelativeLayout и т. Д.) Являются дочерними классами ViewGroup. Если у вас есть один из них, у вас уже есть ViewGroup.
GrandOpener
15

С помощью этой функции вы можете удалить только некоторые типы представлений в 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
Проголосовали против, потому что OP не спрашивал, как удалить различные типы дочерних представлений. OP хотел удалить все дочерние представления.
protectedmember
3

Попробуй это

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

Этот код у меня работает.

Gowthaman M
источник
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);
        }
    }
}
kot32go
источник