removeAllViews() 对子视图有啥作用?
Posted
技术标签:
【中文标题】removeAllViews() 对子视图有啥作用?【英文标题】:What does removeAllViews() do with child views?removeAllViews() 对子视图有什么作用? 【发布时间】:2015-04-28 17:24:42 【问题描述】:我的布局中有以下层次结构:
ScrollView
RadioGroup
RelativeLayout
RadioButton
ImageView
RelativeLayout
RadioButton
ImageView
...
现在的重点是,它在 RadioButtons
和 ImageViews
定义了默认值(占位符)的 XML 编辑器中看起来很好,但是当我启动一个活动并在 RadioGroup
上调用 removeAllViews()
时,所有ImageViews
消失。有趣的是,所有按钮都有新的值,只有ImageViews
无论如何都不会更新(设置新的源图像没有结果)。
所以,我的问题是:removeAllViews()
是完全擦除子视图(就像它们从未存在于布局 XML 文件中一样)还是只是删除了一些值,留下要定义的视图参数(例如设置新的源图像或新的按钮说明)?
【问题讨论】:
【参考方案1】:来自official documentation,removeAllViews()
:
调用此方法从 ViewGroup 中删除所有子视图。
调用此方法会将所有子视图设置为null
,因此它将从自身中删除子视图,并且该子视图变为无效(或不被视为子视图),但不是就像它从未存在于 XML 文件中一样。
这是removeAllViews() code:
public void removeAllViews()
removeAllViewsInLayout();
requestLayout();
invalidate();
正如您在removeAllViewsInLayout() 方法中看到的,它将子值设置为null:
children[i] = null;
【讨论】:
好的,这说明了一点。那么让子视图可用和可用的相反顺序是什么? 我认为removeAllViews();
没有反作用,您可以使用addView();
再次将您的视图添加到 ViewGroup。以上是关于removeAllViews() 对子视图有啥作用?的主要内容,如果未能解决你的问题,请参考以下文章
如何获取对子视图的 rootViewController 的引用?
如何使用自动布局对子视图进行编程以占用其父视图宽度的 50% 但保持恒定高度?