removeAllViewsInLayout

removeAllViewsInLayout

我正在动态填充线性布局。根据响应,我必须清除过去的 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()

10-07 12:23