我的布局中具有以下层次结构:
ScrollView
RadioGroup
RelativeLayout
RadioButton
ImageView
RelativeLayout
RadioButton
ImageView
...
现在的关键是,在XML编辑器中看起来不错,其中
RadioButtons
和ImageViews
定义了默认值(占位符),但是当我启动活动并在removeAllViews()
上调用RadioGroup
时,所有ImageViews
消失。有趣的是,所有按钮都获得新值,无论如何都不会更新ImageViews
(设置新的源图像不会产生任何结果)。因此,我的问题是:
removeAllViews()
是否完全擦除子视图(就像它们从未存在于布局XML文件中一样)还是只是删除一些值以使视图的参数得以定义(如设置新的源图像或新的按钮描述)? ? 最佳答案
在official documentation,removeAllViews()
中:
调用此方法从ViewGroup中删除所有子视图。
调用此方法会将所有子视图设置为null
,因此将从其自身中删除子视图,并且该子视图无效(或不视为子视图),但又不像XML文件中不存在的子视图那样。
这是removeAllViews() code:
public void removeAllViews() {
removeAllViewsInLayout();
requestLayout();
invalidate();
}
如您在removeAllViewsInLayout()方法中所见,它将子值设置为null:
children[i] = null;