Zunächst ein kleiner Hintergrund:
Ich habe ein Layout in einer Bildlaufansicht. Wenn der Benutzer auf dem Bildschirm einen Bildlauf durchführt, wird zunächst ein Bildlauf in der Bildlaufansicht durchgeführt. Nach einer gewissen Anzahl von Bildläufen sollte ich jedoch den Bildlauf in der Bildlaufansicht deaktivieren und den "Bildlauffokus" auf eine Webansicht innerhalb des untergeordneten Layouts verschieben. Auf diese Weise bleibt die Bildlaufansicht erhalten und alle Bildlaufereignisse gelangen in die darin enthaltene Webansicht.
Wenn eine Bildlaufschwelle erreicht ist, entferne ich für eine Lösung das untergeordnete Layout aus der Bildlaufansicht und füge es in das übergeordnete Element der Bildlaufansicht ein (und mache die Bildlaufansicht unsichtbar).
// Remove the child view from the scroll view
scrollView.removeView(scrollChildLayout);
// Get scroll view out of the way
scrollView.setVisibility(View.GONE);
// Put the child view into scrollview's parent view
parentLayout.addView(scrollChildLayout);
Allgemeine Idee: (-> bedeutet enthält)
Vorher: Elternlayout -> Bildlaufansicht -> scrollChildLayout
Nachher: parentLayout -> scrollChildLayout
Der obige Code gibt mir diese Ausnahme:
java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first.
at android.view.ViewGroup.addViewInner(ViewGroup.java:1976)
at android.view.ViewGroup.addView(ViewGroup.java:1871)
at android.view.ViewGroup.addView(ViewGroup.java:1828)
at android.view.ViewGroup.addView(ViewGroup.java:1808)
Weißt du was los ist? Ich rufe eindeutig removeView auf dem übergeordneten Element auf.