我正在动态填充线性布局。根据响应,我必须清除过去的 subview 并创建新的 View 。我已经阅读了文档,但是仍然对这两种方法感到困惑,它们看起来都具有相同的功能。我应该使用哪个功能。
最佳答案
正如斯科特·比格斯(Scott Biggs)所指出的,两者之间的差别并不大。唯一的区别是removeAllViews()
之后会调用requestLayout()
和invalidate()
。造成这种差异的关键是要了解removeAllViewInLayout()
的命名。令人困惑的是,它的含义不是“删除此 View 布局中的所有 View ”。
If we look at the similar method, removeViewInLayout(), we can understand what it's supposed to mean:
因此removeAllViewsInLayout()
实际上意味着“删除所有 View ,并且我们在布局过程中调用此方法(即onLayout())”。这就是为什么removeAllViewsInLayout()
不会调用requestLayout()
的原因,因为假定您当前已经在布局 channel 中,因此不需要再次请求布局 channel 。
如果您使用removeAllViewsInLayout()
,那么您有责任确保在布局过程中调用它,或者根据需要正确调用requestLayout()
和invalidate()
。