Сначала немного предыстории:
У меня есть макет внутри прокрутки. Сначала, когда пользователь прокручивает экран, прокручивается прокрутка. Однако после определенного количества прокрутки я должен был отключить прокрутку в представлении прокрутки, чтобы переместить «фокус прокрутки» на веб-представление внутри дочернего макета. Таким образом, прокрутка фиксируется, и все события прокрутки переходят в веб-просмотр внутри нее.
Итак, для решения, когда достигается порог прокрутки, я удаляю дочерний макет из scrollview и помещаю его в родительский scrollview (и делаю прокрутку невидимой).
// 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);
Общая идея: (-> означает содержит)
Раньше: parentlayout -> scrollview -> scrollChildLayout
После: parentLayout -> scrollChildLayout
Приведенный выше код дает мне это исключение:
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)
Вы знаете, что происходит? Я явно вызываю removeView для родителя.