我有一个ListView,其中listview的每一行包含大约10个ImageButtons.这些按钮中的大多数都具有visibility = Gone,并且仅在极少数情况下出现.我想知道是否值得用ViewStubs替换这些ImageButton以避免一直为listview的所有行加载它们(以及它们包含的图像).然后他们的可见性再次设置为"Gone",所以我不确定加载它们有什么影响.他们的图像真的被加载了吗?
请注意,我所说的是将8个ImageButtons替换为8个ViewStub,而不是1个
干杯
A ViewStub
是一种dumb and lightweight
观点.它有no dimension
,它没有绘制任何东西,也没有以任何方式参与布局.这意味着a ViewStub
非常cheap to inflate and very cheap to keep
处于视图层次结构中.A ViewStub
可以最好地描述为a lazy include
.通过引用的布局ViewStub
是inflated and added
对用户界面只when you decide
左右.
有时您的布局可能需要complex views
很少使用.无论是项目详细信息,进度指示器还是撤消消息,您都可以通过仅在需要时加载视图来减少内存使用并加快渲染速度.
简单的a ViewStub
用于提高渲染布局的效率.通过使用ViewStub
,可以创建手动视图,但不能将视图添加到视图层次结构.在运行时,可以轻松充气,同时ViewStub
充气,内容viewstub
将被替换为定义的布局viewstub
.
在ViewStub
将加载只有当你真正使用它/需要它,即当您的可见性设置为VISIBLE
(实际可见)或INVISIBLE
(仍然不可见,但其大小是不是0了).ViewStub
一nice optimization
,因为你可以有一个复杂的layout with tons of small views or headers
任何地方,而且还有你的Activity load up really fast
.一旦你使用其中一个视图,它将被加载.
您必须首先添加ViewStub
布局,然后才能将其充气到另一个视图.
注意:一个缺点ViewStub
是它当前不支持
布局中的标记要膨胀.Alos ViewStub
不能多次使用.同样保持长寿命的参考ViewStub
是不必要的,如果需要的话,最好在充气后将其取消,这样GC
可以吃掉它.
我们假设你的ViewStub
身份证是view_stub
.您需要在以下位置执行以下操作activity
:
ViewStub viewStub = (ViewStub) findViewById(R.id.view_stub); View inflatedView = viewStub.inflate(); ImageButton button = (ImageButton) inflatedView.findViewById(R.id.button);
现在,您可以使用按钮执行任何操作:)也就是说,inflate方法返回存根布局,其中包含XML文件中的实际元素.
当然,您始终可以拥有onClick
XML属性或可以动态调用.
Is a ViewStub worth it? ->For the scenarios that you are specifying, I think `ViewStub` will be worth-shot.
请参阅下面的网址 ViewStub
http://android-developers.blogspot.in/2009/03/android-layout-tricks-3-optimize-with.html
http://developer.android.com/reference/android/view/ViewStub.html
http://developer.android.com/training/improving-layouts/loading-ondemand.html
而不是ViewStub
你可以尝试<\include> tag
.在
将只包含XML内容的基础xml文件,就好像整个事情只是一个大的文件.这是在不同布局之间共享布局部件的好方法.
android中