Android之viewstub用法详解及实现延迟加载
2014-05-18 09:56
405 查看
这一篇是接着上面的include标签的例子来讲的,地址/article/1501994.html
上一篇的布局中间就用了viewstub这个控件,现在来说一下其作用和用法
" ViewStub 是一个不可见的,大小为0的View,最佳用途就是实现View的延迟加载,避免资源浪费,在需要的时候才加载View
"
需要注意的是,加载view之后,viewstub本身就会被新加载进来的view替换掉
上代码了,看完就理解了
acitivity_main.xml
其中inflatedId就是新加载进来的view的id,如果需要获取这个view,就要用这个inflatedId,原来的id已经被取代了
而layout就是要加载进来的布局,代码如下
pic_view.xml
里面只放了一张图片
MainActivity.java
①inflate()被调用时, 被加载的视图替代viewstub并且返回自己的视图对象。这使得应用程序不需要额外执行findViewById()来获取所加载的视图的引用
②句不需要,如果用到setvisibility的话,那么①②两句顺序不可颠倒,否则报错
java.lang.IllegalStateException:ViewStub must have a non-null ViewGroup viewParent,因为viewstub不能反复inflate,只能inflate一次,setVisibility会间接调用inflate
①句 获取到加载进来的pic_view,使得应用程序不需要额外执行findViewById()来获取加载视图的引用,如果要自己获取的话,id要用inflateid
③句 这里view将会是null,因为viewstub被替换掉,pic_stub的id已经不存在了
④句 用inflateid获取到加载进来的view正常
作者:jason0539
微博:http://weibo.com/2553717707
博客:http://blog.csdn.net/jason0539(转载请说明出处)
上一篇的布局中间就用了viewstub这个控件,现在来说一下其作用和用法
" ViewStub 是一个不可见的,大小为0的View,最佳用途就是实现View的延迟加载,避免资源浪费,在需要的时候才加载View
"
需要注意的是,加载view之后,viewstub本身就会被新加载进来的view替换掉
上代码了,看完就理解了
acitivity_main.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" > <include android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_alignParentTop="true" android:layout_marginTop="30dp" layout="@layout/header" /> <ViewStub android:id="@+id/pic_stub" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerInParent="true" android:inflatedId="@+id/pic_view_id_after_inflate" android:layout="@layout/pic_view" /> <include layout="@layout/footer" /> </RelativeLayout>
其中inflatedId就是新加载进来的view的id,如果需要获取这个view,就要用这个inflatedId,原来的id已经被取代了
而layout就是要加载进来的布局,代码如下
pic_view.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" > <ImageView android:id="@+id/iv_pic" android:layout_width="match_parent" android:layout_height="match_parent" android:src="@drawable/pic" > </ImageView> </LinearLayout>
里面只放了一张图片
MainActivity.java
public class MainActivity extends Activity { private ViewStub pic_sub; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); pic_sub = (ViewStub) findViewById(R.id.pic_stub); new Timer().schedule(new TimerTask() { @Override public void run() { handler.sendEmptyMessage(1); } }, 1000);// 延迟1秒,然后加载 } Handler handler = new Handler() { public void handleMessage(android.os.Message msg) { View pic_view = pic_sub.inflate();// ① //pic_sub.setVisibility(View.VISIBLE);// ② ImageView iv_pic = (ImageView) pic_view.findViewById(R.id.iv_pic); iv_pic.setImageResource(R.drawable.pic); View view = findViewById(R.id.pic_stub);//③ view = findViewById(R.id.pic_view_id_after_inflate);//④ }; }; }
①inflate()被调用时, 被加载的视图替代viewstub并且返回自己的视图对象。这使得应用程序不需要额外执行findViewById()来获取所加载的视图的引用
②句不需要,如果用到setvisibility的话,那么①②两句顺序不可颠倒,否则报错
java.lang.IllegalStateException:ViewStub must have a non-null ViewGroup viewParent,因为viewstub不能反复inflate,只能inflate一次,setVisibility会间接调用inflate
①句 获取到加载进来的pic_view,使得应用程序不需要额外执行findViewById()来获取加载视图的引用,如果要自己获取的话,id要用inflateid
③句 这里view将会是null,因为viewstub被替换掉,pic_stub的id已经不存在了
④句 用inflateid获取到加载进来的view正常
作者:jason0539
微博:http://weibo.com/2553717707
博客:http://blog.csdn.net/jason0539(转载请说明出处)
相关文章推荐
- Android之viewstub用法详解及实现延迟加载
- Android之viewstub用法详解及实现延迟加载
- Android开发技巧之viewstub用法详解及实现延迟加载
- Android ViewStub 布局延迟加载
- 使用<ViewStub>实现view的延迟加载
- Android知识点之延迟加载:ViewStub的使用
- Android中关于布局文件延迟加载控件ViewStub
- Android-详解RecyclerView+BGARefreshLayout实现自定义下拉刷新、上拉加载和侧滑删除效果
- Android布局性能优化—从源码角度看ViewStub延迟加载技术
- Android优化——UI优化(三)使用ViewStub延迟加载
- android SpannableString使用详解,替代多个TextView拼凑实现的用法,实现多个样式,如加粗,超链接等
- Android 详解实现TextView加载带图片标签的Html并按比例缩放
- Android开发实现的ViewPager引导页功能(动态加载指示器)详解
- Android之ViewPager延迟加载的另类实现
- android UI 优化之<viewstub>实现View的延迟加载
- Android进阶——布局优化之灵活借助ViewStub实现懒加载
- Android布局性能优化—从源码角度看ViewStub延迟加载技术
- Android中关于布局文件延迟加载控件ViewStub
- android ViewPager中页面延迟加载的实现
- Android之viewstub用法详解