Primero un poco de historia:
Tengo un diseño dentro de una vista de desplazamiento. Al principio, cuando el usuario se desplaza en la pantalla, la vista de desplazamiento se desplaza. Sin embargo, después de una cierta cantidad de desplazamiento, debía deshabilitar el desplazamiento en la vista de desplazamiento y mover el "foco de desplazamiento" a una vista web dentro del diseño secundario. De esta manera, la vista de desplazamiento se pega y todos los eventos de desplazamiento van a la vista web dentro de ella.
Entonces, para una solución, cuando se alcanza el umbral de desplazamiento, elimino el diseño secundario de la vista de desplazamiento y lo pongo en el padre de la vista de desplazamiento (y hago que la vista de desplazamiento sea invisible).
// 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);
Idea general: (-> medios contiene)
Antes: parentlayout -> scrollview -> scrollChildLayout
Después: parentLayout -> scrollChildLayout
El código anterior me está dando esta excepción:
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)
¿Sabes lo que está pasando? Claramente estoy llamando a removeView en el padre.