首先调用孩子父母的removeView()

首先有一点背景:

我有一个滚动视图内的布局。 首先,当用户在屏幕上滚动时,滚动视图会滚动。 但是,在一定数量的滚动后,我将禁用滚动视图上的滚动,将“滚动焦点”移动到子布局内的web视图上。 这样,滚动视图就会粘住,所有滚动事件都会转到其中的webview。

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

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


解:

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

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

感谢@Dongshengcn提供的解决方案


请先尝试从其父视图中移除scrollChildLayout?

scrollview.removeView(scrollChildLayout)

或者从父视图中删除所有的子项,并再次添加它们。

scrollview.removeAllViews()

在onCreate中使用activity或在onCreateView中使用fragment。

 if (view != null) {
    ViewGroup parent = (ViewGroup) view.getParent();
    if (parent != null) {
        parent.removeView(view);
    }
}
try {
    view = inflater.inflate(R.layout.fragment_main, container, false);
} catch (InflateException e) {

}
链接地址: http://www.djcxy.com/p/78297.html

上一篇: Call removeView() on the child's parent first

下一篇: How to scroll to top of long ScrollView layout?