如何调用子节点的父级的removeView() ?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (26)

我在滚动视图中有一个布局。首先,当用户在屏幕上滚动时,滚动视图滚动。但是,在完成一定数量的滚动之后,我将禁用滚动视图上的滚动--将“滚动焦点”移动到子布局中的webview上。这样,滚动视图就会继续,所有滚动事件都会转到它内部的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);

上面的代码给了我一个例外:

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)

你知道怎么回事吗?

提问于
用户回答回答于

解决办法:

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

使用子元素获取对父元素的引用。将父类强制转换为ViewGroup,以便您能够访问远程视图方法并使用该方法。

用户回答回答于

试着先从父视图中删除滚动子Layout

scrollview.removeView(scrollChildLayout)

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

scrollview.removeAllViews()

扫码关注云+社区