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

ScrollView
    RadioGroup
        RelativeLayout
            RadioButton
            ImageView
        RelativeLayout
            RadioButton
            ImageView
            ...


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

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

最佳答案

official documentationremoveAllViews()中:


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


调用此方法会将所有子视图设置为null,因此将从其自身中删除子视图,并且该子视图无效(或不视为子视图),但又不像XML文件中不存在的子视图那样。

这是removeAllViews() code

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


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

children[i] = null;

09-11 21:09