L_Y*_*ing 54 android android-layout
我正在动态填充线性布局.根据响应,我必须清除过去的子视图并创建新视图.我已阅读该文档,但仍然与这对方法混淆,它们看起来都是相同的功能.我应该使用哪个功能.
Dav*_*Liu 27
斯科特比格斯指出,差异并不大.唯一的区别是removeAllViews()电话requestLayout()和invalidate()之后.这种差异的关键在于理解命名removeAllViewInLayout().令人困惑的是,它的意思并不是"删除此视图布局中的所有视图".
如果我们看一下类似的方法,removeViewInLayout(),我们可以理解它应该是什么意思:
在布局期间删除视图.如果在onLayout()方法中,您需要删除更多视图,这非常有用.
所以removeAllViewsInLayout()实际上意味着"删除所有视图,我们在布局传递期间调用此方法(即onLayout())".这就是为什么removeAllViewsInLayout()不调用requestLayout(),因为假设你当前已经在布局传递中,所以不需要请求另一个布局传递.
如果您使用的removeAllViewsInLayout(),那么它是你的责任,以确保您正在布局传递过程中调用这个,或者正确地调用requestLayout()和invalidate()按需要.
Ale*_*ndr 19
removeAllViews(): - 调用此方法从ViewGroup中删除所有子视图.removeAllViewsInLayout():由ViewGroup子类控制以从其自身移除子视图,当它必须首先知道它在屏幕上的大小,然后才能计算它将呈现的子视图数.
干杯!
Sco*_*ggs 12
那么,看看来源,没有太大区别:
public void removeAllViews() {
removeAllViewsInLayout(); // Details implemented here
requestLayout();
invalidate(true);
}
Run Code Online (Sandbox Code Playgroud)
因此,除非您想invalidate()在您选择的时间打电话,否则您可以使用removeAllViews()并节省一些打字.
编辑
有关更详细的解释,请参阅David Lui的回答.总结一下,removeAllViews()除非你正在构建一个View ,否则请使用它- 在这种情况下你要调用它removeAllViewsInLayout().
| 归档时间: |
|
| 查看次数: |
19358 次 |
| 最近记录: |