您必须对孩子的父母先调用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
。
removeAllViews()=>相同的错误; mContainer是我的layout.xml的根LiniarLayout – Corneliu
'nViews'从哪里来?你还没有发布足够的信息来分析为什么'nViews'会被添加两次,但是错误信息非常清楚,就是发生了什么。 –