为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

偶然的你 2019-10-08 14:59:07
首先一点背景:我在scrollview中有一个布局。首先,当用户在屏幕上滚动时,滚动视图将滚动。但是,经过一定数量的滚动后,我将禁用滚动视图上的滚动,将“滚动焦点”移到子布局内的Web视图上。这样,滚动视图会停留,所有滚动事件都将进入其中的Webview。因此,对于一个解决方案,当达到滚动阈值时,我将从滚动视图中移除子布局并将其放置在滚动视图的父视图中(并使滚动视图不可见)。// Remove the child view from the scroll viewscrollView.removeView(scrollChildLayout);// Get scroll view out of the wayscrollView.setVisibility(View.GONE);// Put the child view into scrollview's parent viewparentLayout.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。
查看完整描述

4 回答

?
茅侃侃

TA贡献1842条经验 获得超21个赞

解:


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

//scrollView.removeView(scrollChildLayout);

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


查看完整回答
反对 回复 2019-10-08
?
斯蒂芬大帝

TA贡献1827条经验 获得超8个赞

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


scrollview.removeView(scrollChildLayout)

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


scrollview.removeAllViews()


查看完整回答
反对 回复 2019-10-08
?
绝地无双

TA贡献1946条经验 获得超4个赞

在带有活动的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) {


}


查看完整回答
反对 回复 2019-10-08
?
慕田峪7331174

TA贡献1828条经验 获得超13个赞

好吧,叫我偏执,但我建议:


  final android.view.ViewParent parent = view.getParent ();


  if (parent instanceof android.view.ViewManager)

  {

     final android.view.ViewManager viewManager = (android.view.ViewManager) parent;


     viewManager.removeView (view);

  } // if

抛弃instanceof不公正似乎是错误的。并且(感谢IntelliJ IDEA告诉我)  removeView是ViewManager界面的一部分。当有一个非常合适的接口可用时,就不应将其转换为具体的类。


查看完整回答
反对 回复 2019-10-08
  • 4 回答
  • 0 关注
  • 966 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信