Wie würde ich alle untergeordneten Ansichten aus einem Widget entfernen? Zum Beispiel habe ich eine GridView und ich baue viele andere LinearLayouts dynamisch darin auf; Später in meiner Anwendung möchte ich mit dieser GridView neu beginnen und alle untergeordneten Ansichten löschen. Wie würde ich das tun? TIA.
Entfernen aller untergeordneten Ansichten aus der Ansicht
viewGroup.removeAllViews()
funktioniert für jede viewGroup. In Ihrem Fall ist es GridView.
http://developer.android.com/reference/android/view/ViewGroup.html#removeAllViews()
-
Tatsächlich löst removeAllViews() eine Ausnahme aus, wenn es für GridView aufgerufen wird. Aus den Dokumenten: “Diese Methode wird nicht unterstützt und löst beim Aufruf eine UnsupportedOperationException aus.”
– Moritz
9. Februar 2012 um 11:43 Uhr
-
Dieser Kommentar gilt für die abstrakte Basisklasse, von der ViewGroup abgeleitet ist. ViewGroup selbst und alle seine abgeleiteten Klassen unterstützen removeAllViews.
– Dale Wilson
30. Juli 2013 um 21:32 Uhr
-
Wie kommt man
ViewGroup
?– Nimmagadda Gowtham
28. November 2015 um 17:36 Uhr
-
@NimmagaddaGowtham Die meisten XxxLayout-Klassen (LinearLayout, RelativeLayout usw.) sind untergeordnete Klassen von ViewGroup. Wenn Sie eine davon haben, haben Sie bereits eine ViewGroup.
– Großer Auftakt
24. April 2016 um 14:26 Uhr
TienLuong
Sie können nur einige Ansichtstypen in a entfernen ViewGroup mit dieser Funktion:
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;
}
}
}
-
Abgestimmt, weil das OP nicht gefragt hat, wie verschiedene Arten von untergeordneten Ansichten entfernt werden können. Das OP wollte alle untergeordneten Ansichten entfernen.
– geschütztes Mitglied
3. Juli 2017 um 9:53 Uhr
Versuche dies
RelativeLayout relativeLayout = findViewById(R.id.realtive_layout_root);
relativeLayout.removeAllViews();
Dieser Code funktioniert bei mir.
kot32go
Versuche dies
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);
}
}
}