您必须对孩子的父母先调用removeView()

问题描述:

我有:您必须对孩子的父母先调用removeView()

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

但我recive错误:

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

有什么不好?

removeAllViewsInLayout()removeAllViews()之间的一个重要区别。

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

由于事实上,removeAllViewsInLayout()配备了这样的警告:

不要调用此方法,除非你正在扩展的ViewGroup和理解角度测量和布局的管道。

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

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

+0

removeAllViews()=>相同的错误; mContainer是我的layout.xml的根LiniarLayout – Corneliu

+0

'nViews'从哪里来?你还没有发布足够的信息来分析为什么'nViews'会被添加两次,但是错误信息非常清楚,就是发生了什么。 –