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
            ...

现在的重点是,它在 RadioButtonsImageViews 定义了默认值(占位符)的 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% 但保持恒定高度?

微信小程序的视图层和逻辑层有啥作用

MySQL 中视图有啥作用,啥时候有需要用到,能够提供一些学习的网站或者资料?

如何取消对子 UIControl 的触摸?