代码优化之ViewStub
来源:互联网 发布:java 乐观锁 例子 编辑:程序博客网 时间:2024/06/06 03:05
最近对代码进行优化,想到了面试时常问的ViewStub,可以实现延迟加载.虽然知道大概工作过程是初始化时不加载,使用的时候再加载.但是具体如何使用却还一直没有动手尝试.
https://developer.android.com/training/improving-layouts/loading-ondemand.html
https://developer.android.com/reference/android/view/ViewStub.html
看了下官方文档,ViewStub使用起来也很简单,教程就几句话.
首先是在布局文件里,将需要延迟加载的布局用ViewStub标签替换.
<ViewStub android:id="@+id/stub_import" android:inflatedId="@+id/panel_import" android:layout="@layout/progress_overlay" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_gravity="bottom" />
同时将需要延迟加载的布局移出,单独写在新的布局文件中(本例中的progress_overlay),需要注意的是ViewStub不支持与<merge>
标签一起使用,即单独移除的布局,不能用<merge>
标签作为父布局.
ViewStub标签中新增了inflatedId属性,ViewStub使用id属性,当ViewStub被新布局替换之后,就使用inflatedId来表示新布局,ViewStub不再存在于布局中.
布局文件配置好,在代码中使用时也很简单,有两种方式来加载.
findViewById(R.id.stub_import)).setVisibility(View.VISIBLE);// orView importPanel = ((ViewStub) findViewById(R.id.stub_import)).inflate();
通过findViewById找到ViewStub之后,调用setVisibility(View.VISIBLE)和inflate()方法都可以加载新布局.
其中ViewStub中setVisibility方法经过了重写,当ViewStub使用setVisibility方法设置为VISIBLE或INVISIBLE时,都会调用inflate()方法,实现加载.
这两种方法区别在于,setVisibility使用方便,当代码比较简单,即只需要显示出布局,不需要做其他操作(显示无网络信息等时),可以不影响之前代码的逻辑.
但由于setVisibility方法返回值为空,所以如果需要对新加载布局进行修改或输入时,使用inflate()方法可以直接返回所需的View,不在需要findViewById了.
需要注意一点,即ViewStub加载成功后,ViewStub即为空不再可用了.
- 代码优化之ViewStub
- Android优化之ViewStub
- Android性能优化之:ViewStub
- Android性能优化之ViewStub
- Android布局优化之ViewStub
- Android性能优化之:ViewStub
- Android性能优化之--ViewStub
- android 性能优化之布局优化-----ViewStub
- android开发布局优化之ViewStub
- Android 布局优化之include、merge、ViewStub
- Android UI布局优化之ViewStub
- Android之布局优化include、merge 、ViewStub
- Android布局优化之include、ViewStub、merge
- Android布局优化之ViewStub(三)
- 性能优化之布局优化篇一 使用ViewStub视图
- Android布局优化之<merge>与<ViewStub>标签使用
- android UI 优化之<viewstub>实现View的延迟加载
- Android视图优化之Merge,ViewStub基本使用
- 拜访
- 理解架构中的设计原则
- 制学科Siemens.Tecnomatix.Machine.Configurator.1.0.0.1027
- Xshell如何修改字体大小和颜色
- SQL join中级篇--hive中 mapreduce join方法分析
- 代码优化之ViewStub
- nodejs入门(02)-hello world
- node中【request+validation】结合封装
- iOS 获取当前设备连接Wi-Fi的方法总结
- 行人检测、跟踪与检索领域年度进展报告
- ORACLE11g服务定义
- 噪声函数
- 【ssm个人博客项目实战09】写博客与自定义监听器
- postgresql 数据库异步流 hot-standby异步流环境搭建及主备库切换