首先是一些背景知识:
我在滚动视图中有一个布局。首先,当用户在屏幕上滚动时,滚动视图也会滚动。然而,经过一定数量的滚动后,我将禁用滚动视图上的滚动,并将“滚动焦点”移动到子布局内的was视图上。这样,scrollview就会固定下来,所有的scroll事件都会转到其中的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。
发布于 2011-07-01 01:27:10
解决方案:
((ViewGroup)scrollChildLayout.getParent()).removeView(scrollChildLayout);
//scrollView.removeView(scrollChildLayout);
使用子元素获取对父元素的引用。将父对象强制转换为ViewGroup,这样您就可以访问并使用removeView方法。
感谢@东升to的解决方案
发布于 2011-06-30 04:45:13
是否先尝试从父视图中删除scrollChildLayout?
scrollview.removeView(scrollChildLayout)
或者从父视图中删除所有子视图,然后重新添加它们。
scrollview.removeAllViews()
发布于 2014-05-29 16:26:28
在带有activity的onCreate或带有片段的onCreateView中。
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) {
}
https://stackoverflow.com/questions/6526874
复制相似问题