避免ViewStub重复填充
2015-12-01 11:20
477 查看
ViewStub 是一个不可见的,大小为0的View,最佳用途就是实现View的延迟加载,避免资源浪费,在需要的时候才加载View。在Android性能优化中常常使用到ViewStub。
但因为viewstub只能inflate一次(setVisibility也会间接调用inflate),重复inflate则会报异常:
解决方法为设置一个Boolean类型的变量,标记viewstub是否已经inflate,如果viewstub还未inflate则执行初始化操作,反之则不进行操作。其中要使用ViewStub中的
解决方法:
1.定义boolean变量和ViewStub
2.初始化ViewStub,并为ViewStub添加OnInflateListener()监听事件
3.填充ViewStub
但因为viewstub只能inflate一次(setVisibility也会间接调用inflate),重复inflate则会报异常:
java.lang.IllegalStateException:ViewStub must have a non-null ViewGroup viewParent
解决方法为设置一个Boolean类型的变量,标记viewstub是否已经inflate,如果viewstub还未inflate则执行初始化操作,反之则不进行操作。其中要使用ViewStub中的
OnInflateListener()监听事件来判断是否已经填充。
解决方法:
1.定义boolean变量和ViewStub
boolean isInflate = false; ViewStub mViewStub;
2.初始化ViewStub,并为ViewStub添加OnInflateListener()监听事件
mViewStub = (ViewStub)findViewById(R.id.viewstub_match_single); mViewStub.setOnInflateListener(new OnInflateListener() { @Override public void onInflate(ViewStub stub, View inflated) { isInflate = true; } });
3.填充ViewStub
private void initViewStub(){//填充ViewStub的方法 if(!isInflate){//如果没有填充则执行inflate操作 View view = stubMatchSingle.inflate(); //初始化ViewStub的layout里面的控件 TextView mTv = (TextView) view.findViewById(R.id.txt_url); mTv.setOnClickListener(this); } }
相关文章推荐
- 优先队列
- UWP应用的数据绑定解析
- 唱歌技巧总结
- 动态代理模式
- cas 配置与自定义开发
- gulp使用记录
- iOS 中类方法的多种调用方式
- mysql5.7 修改root密码
- javascript内存原理图 protoye —proto—
- Android如何实现毛玻璃效果之Android高级模糊技术
- LintCode: Sort Colors
- ⾃自定义cell的步骤
- ASP.NET能知道的东西
- android 三星手机拍照裁剪后会旋转问题
- linux防火墙
- Zookeeper入门-Java版本HelloWorld例子
- Zookeeper入门-Java版本HelloWorld例子
- Zookeeper入门-Java版本HelloWorld例子
- leetcode:Palindrome Partitioning II
- 编译 PHP 及 memcached 扩展