2010-10-01 52 views
17

所以我可以在运行时给一个ViewStub充气。比方说,我想让它消失,然后再膨胀,这取决于发生的某些事件(例如,根据用户在屏幕上选择的内容膨胀和缩小的工具栏)。如何“放气”一个ViewStub?

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

或者我在这里做错了什么?

谢谢! :)

+0

'setVisibility(View.GONE)'有点更具描述性。 – st0le 2010-10-01 19:25:37

+0

谢谢....编辑它 – Sid 2010-10-01 19:42:26

+0

什么不喜欢View.GONE? – 2010-10-01 20:20:57

回答

33

充气布局可能会很昂贵,特别是在较旧的设备上。可以将ViewStub看作更多的视图子树的延迟加载机制,它可能会也可能不会被展开,而不是在运行时换出视图层次结构的各个部分。一旦膨胀,交换VISIBLE/GONE之间没有任何问题。 GONE将使框架在昂贵的遍历期间跳过该子树。

只要您不需要充气视图使用的内存,就是如此。设置GONE的可见性不会释放任何内存;它只会将视图标记为布局和绘图目的。要释放viewstub的充气视图的内存,您实际上必须移除充气的视图并将其替换为新的视图桩以备将来使用。

+0

hello @adamp我有一个疑问。如果我创建一个简单的线性布局并在其中动态添加一个子视图,并且当我不需要它时,我会从线性布局中删除该子视图,从而完全删除子视图。当你想要内存优化时,它是不错的方法吗?因为一旦查看存根膨胀,我们不能删除该视图,只需将其删除即可。 – KDeogharkar 2014-08-28 05:23:12

0

是的,你可以删除任何你想要的.i我刚刚做完了。

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

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

v.setVisibility(View.GONE); 
+1

将可见性设置为“通过”不会将其删除,它只是隐藏它。 – Pkmmte 2015-12-02 22:57:48