【问题标题】:How to "deflate" a ViewStub?如何“放气” ViewStub?
【发布时间】:2011-04-20 00:48:40
【问题描述】:

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

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

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

谢谢! :)

【问题讨论】:

  • setVisibility(View.GONE) 更具描述性。
  • 您不喜欢 View.GONE 的哪些方面?
  • 我并不讨厌它。只是想知道这是否是正确的方法,还是有其他有效的方法?

标签: android deflate inflate viewstub


【解决方案1】:

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

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

【讨论】:

  • 你好@adamp 我有一个疑问。如果我创建一个简单的线性布局并在其中动态添加一个子视图,当我不需要它时,我会以这种方式从线性布局中删除该子视图,它将完全删除子视图。当您想要内存优化时,这是一种好方法吗?因为一旦视图存根膨胀,我们就无法通过使其消失来删除该视图。
【解决方案2】:

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

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

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

v.setVisibility(View.GONE);

【讨论】:

  • 将可见性设置为 GONE 不会删除它,它只是隐藏它。
猜你喜欢
  • 1970-01-01
  • 2021-06-16
  • 2021-12-09
  • 1970-01-01
  • 2017-07-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-11
相关资源
最近更新 更多