相关栏目: 程序开发 当前位置:主页 > 程序开发 >

Android开发技巧之viewstub用法详解及实现延迟加载

发布时间:2019-01-26 作者:凯发K 分类:程序开发

这一篇是接着上面的include标签的例子来讲的,地址http://blog.csdn.net/jason0539/article/details/26131831

上一篇的布局中间就用了viewstub这个控件,现在来说一下其作用和用法

"

ViewStub 是一个不可见的,大小为0的View,最佳用途就是实现View的延迟加载,避免资源浪费,在需要的时候才加载View

"

需要注意的是,加载view之后,viewstub本身就会被新加载进来的view替换掉

上代码了,看完就理解了

acitivity_main.xml



    

    


    


其中inflatedId就是新加载进来的view的id,如果需要获取这个view,就要用这个inflatedId,原来的id已经被取代了

而layout就是要加载进来的布局,代码如下

龙发集团pic_view.xml




    
    


里面只放了一张图片

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()来AAAAAAAAAAAAAAAA

②句不需要,如果用到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(转载请说明出处)

http://www.bkjia.com/Androidjc/772090.htmlwww.bkjia.comtruehttp://www.bkjia.com/Androidjc/772090.htmlTechArticle这一篇是接着上面的include标签的例子来讲的,地址http://blog.csdn.net/jason0539/article/details/26131831 上一篇的布局中间就用了viewstub这个控件,现在来...

本文源自: 凯发国际

上一篇:Android安全退出应用程序 下一篇:没有了

Copyright © 2005-2016 http://www.owlpma.com 凯发国际_凯发国际开户礼金_凯发注册送_新浪娱乐版权所有 凯发国际_凯发国际开户礼金_凯发注册送_新浪娱乐