首先一点背景:

我在scrollview中有一个布局。首先,当用户在屏幕上滚动时,滚动 View 将滚动。但是,经过一定数量的滚动后,我将禁用滚动 View 上的滚动,将“滚动焦点”移到子布局内的Web View 上。这样,滚动 View 会停留,所有滚动事件都将进入其中的Webview。

因此,对于一个解决方案,当达到滚动阈值时,我将从滚动 View 中删除子布局并将其放置在滚动 View 的父 View 中(并使滚动 View 不可见)。

// 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

上面的代码给了我这个异常(exception):
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。

最佳答案

解:

((ViewGroup)scrollChildLayout.getParent()).removeView(scrollChildLayout);
//scrollView.removeView(scrollChildLayout);

使用子元素获取对父元素的引用。将父对象强制转换为ViewGroup,以便您可以访问removeView方法并使用它。

感谢@Dongshengcn提供的解决方案

07-24 18:57