Najpierw małe tło:
Mam układ w przewijanym widoku. Na początku, gdy użytkownik przewija ekran, przewija się widok scrollview. Jednak po pewnym czasie przewijania musiałem wyłączyć przewijanie w widoku przewijania, aby przenieść „fokus przewijania” na widok sieciowy w układzie potomnym. W ten sposób przewijane drążki i wszystkie zdarzenia przewijania trafiają do znajdującego się w nim widoku internetowego.
Tak więc, aby znaleźć rozwiązanie, po osiągnięciu progu przewijania usuwam układ potomny z widoku scrollview i umieszczam go w elemencie nadrzędnym scrollview (i sprawiam, że scrollview jest niewidoczny).
// 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);
Ogólna idea: (-> oznacza zawiera)
Przed: parentlayout -> scrollview -> scrollChildLayout
Po: parentLayout -> scrollChildLayout
Powyższy kod daje mi ten wyjątek:
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)
Czy wiesz, co się dzieje? Wyraźnie wzywam removeView na rodzica.