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

时间:2016-11-14 18:04:06

标签: android view

我有:

 mContainer.removeAllViewsInLayout();
 mContainer.addView(nViews)

但我记得这个错误:

 The specified child already has a parent. You must call removeView()   
 on the child's parent first

出了什么问题?

1 个答案:

答案 0 :(得分:0)

removeAllViewsInLayout()removeAllViews()之间存在重要差异。

前者可能无法删除所有视图,后者将删除所有视图。除非您使用自己的逻辑来确定removeAllViewsInLayout()中删除了哪些视图,否则您可能会尝试向布局添加重复的视图。

事实上,removeAllViewsInLayout()附带了此警告:

  

除非您正在扩展ViewGroup并了解视图测量和布局管道,否则不要调用此方法。

根据您的帖子,我假设您没有扩展ViewGroup并正确分析测量/布局管道,因此不应该调用该方法。

但是,如果mContainer不是nViews的实际父级,则清除mContainer是不够的。在这种情况下,您必须先使用nViews方法删除removeView()方法,然后才能将其添加到mContainer