我的布局中有以下层次结构:
ScrollView
RadioGroup
RelativeLayout
RadioButton
ImageView
RelativeLayout
RadioButton
ImageView
...
现在重点是,在RadioButtons
和ImageViews
定义了默认值(占位符)的XML编辑器中看起来很好,但是当我启动一个活动并调用removeAllViews()
时RadioGroup
,所有ImageViews
都消失了。有趣的是,所有按钮都获得了新值,只有ImageViews
无法更新(设置新的源图像不会产生任何结果)。
所以,我的问题是:removeAllViews()
是否完全删除了子视图(就像它们从未存在于布局XML文件中一样)或只是删除了一些值,使得视图的参数被定义(比如设置新的源图像)或新的按钮说明)?
答案 0 :(得分:4)
来自official documentation,removeAllViews()
:
调用此方法可从ViewGroup中删除所有子视图。
调用此方法会将所有子视图设置为null
,因此它将从自身中删除子视图,并且此子项变为无效(或不被视为子视图),但不像它在XML文件中从未存在过。
public void removeAllViews() {
removeAllViewsInLayout();
requestLayout();
invalidate();
}
正如您在removeAllViewsInLayout()方法中所看到的,它将子值设置为null:
children[i] = null;