27

所以我可以在运行时给 ViewStub 充气。假设我想让它消失,然后可能会根据发生的某些事件再次充气(例如,根据用户在屏幕上选择的内容充气和放气的工具栏)。

我可以使用 View.setVisibility(View.GONE).... 还有其他方法吗?

还是我在这里做错了什么?

谢谢!:)

4

2 回答 2

35

膨胀布局可能会很昂贵,尤其是在旧设备上。将 ViewStub 视为更多的延迟加载机制,用于可能会或可能不会扩展的视图子树,而不是在运行时交换视图层次结构部分的方法。一旦膨胀,在 VISIBLE/GONE 之间切换就没有问题了。GONE 将使框架在昂贵的遍历期间跳过该子树。

只要您不需要膨胀视图使用的内存,这是正确的。将可见性设置为 GONE 不会释放任何内存;它仅将视图标记为已用于布局和绘图目的。要释放viewstub 的inflated view 的内存,您实际上必须删除inflated view 并再次用新的viewstub 替换它以供将来使用。

于 2010-10-01T22:19:24.210 回答
-1

是的,您可以随时删除。我刚刚完成了。

ViewStub stub = findById(...);
View v = stub.inflate();

并设置任何事件的视图可见性。

v.setVisibility(View.GONE);
于 2011-05-12T09:16:58.213 回答