removeAllViews()对子视图有什么作用?

时间:2015-04-28 17:24:42

标签: android layout view

我的布局中有以下层次结构:

ScrollView
    RadioGroup
        RelativeLayout
            RadioButton
            ImageView
        RelativeLayout
            RadioButton
            ImageView
            ...

现在重点是,在RadioButtonsImageViews定义了默认值(占位符)的XML编辑器中看起来很好,但是当我启动一个活动并调用removeAllViews()RadioGroup,所有ImageViews都消失了。有趣的是,所有按钮都获得了新值,只有ImageViews无法更新(设置新的源图像不会产生任何结果)。

所以,我的问题是:removeAllViews()是否完全删除了子视图(就像它们从未存在于布局XML文件中一样)或只是删除了一些值,使得视图的参数被定义(比如设置新的源图像)或新的按钮说明)?

1 个答案:

答案 0 :(得分:4)

来自official documentationremoveAllViews()

  

调用此方法可从ViewGroup中删除所有子视图。

调用此方法会将所有子视图设置为null,因此它将从自身中删除子视图,并且此子项变为无效(或不被视为子视图),但不像它在XML文件中从未存在过。

这是removeAllViews() code

public void removeAllViews() {
     removeAllViewsInLayout();
     requestLayout();
     invalidate();
} 

正如您在removeAllViewsInLayout()方法中所看到的,它将子值设置为null:

children[i] = null;