灯火互联
管理员
管理员
  • 注册日期2011-07-27
  • 发帖数41778
  • QQ
  • 火币41290枚
  • 粉丝1086
  • 关注100
  • 终身成就奖
  • 最爱沙发
  • 忠实会员
  • 灌水天才奖
  • 贴图大师奖
  • 原创先锋奖
  • 特殊贡献奖
  • 宣传大使奖
  • 优秀斑竹奖
  • 社区明星
阅读:3209回复:0

android基础备忘

楼主#
更多 发布于:2012-09-06 13:45

ViewStub 是一个不可见的,大小为0的View,最佳用途就是实现View的延迟加载,在需要的时候再加载View,可java中常见的性能优化方法延迟加载一样。

当调用ViewStub的setVisibility函数设置为可见或则调用inflate初始化该View的时候,ViewStub的资源开始初始化,然后的资源替代ViewStub自己的位置填充在ViewStub的位置。因此在没有调用setVisibility(int) 或则 inflate()函数之前ViewStub一种存在组件树层级结构中,但是由于ViewStub非常轻量级,这对性能影响非常小。可以通过ViewStub的inflatedId属性来重新定义的layout id。 例如:


     <ViewStub Android:id="@+id/stub"
               Android:inflatedId="@+id/subTree"
               Android:layout="@layout/mySubTree"
               Android:layout_width="120dip"
               Android:layout_height="40dip" />

上面定义的ViewStub ,可以通过id “stub”来找到,在初始化资源“mySubTree”后,stub从父组件中删除,然后"mySubTree"替代stub的位置。初始资源"mySubTree"得到的组件可以通过inflatedId 指定的id "subTree"。 然后初始化后的资源被填充到一个120dip宽、40dip高的地方。

推荐使用下面的方式来初始化ViewStub:

     ViewStub stub = (ViewStub) findViewById(R.id.stub);
     View inflated = stub.inflate();

当调用inflate()函数的时候,ViewStub 被的资源替代,并且返回的view。 这样程序可以直接得到的view而不用再次调用函数 findViewById()来查找了。

ViewStub目前有个缺陷就是还不支持 <merge /> 标签。。。


喜欢0 评分0
游客

返回顶部