Android之viewstub用法详解及实现延迟加载

这一篇是接着上面的include标签的例子来讲的,地址http://blog.csdn.net/jason0539/article/details/26131831 上一篇的布局中间就用了viewstub这个控件,现在来说一下其作用和用法” ViewStub 是一个不可见的,大小为0的View,最佳用途就是实现View的延迟加载,避免资源浪费,在需要的时候才加载View”需

大家好,又见面了,我是全栈君。

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

 

上一篇的布局中间就用了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(转载请说明出处)

 

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/121342.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 2022 pycharm 激活码【2022最新】2022.03.10

    (2022 pycharm 激活码)本文适用于JetBrains家族所有ide,包括IntelliJidea,phpstorm,webstorm,pycharm,datagrip等。https://javaforall.cn/100143.htmlIntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,上面是详细链接哦~1…

  • 请写出用Graphics2D类的新方法画一个图形的步骤(表格如何画斜线)

    在机器人需要发表格图片需求,我搜索了一些第三方包,最终使用了java内置的Graphics2D来画表格生成jpg图片,再通过cq语句发送。表格图片,需要有标题,表格头,表格内容,将表格头和表格前三名设置背景色。使用Graphics2D画图,需要画横线,竖线,还有字体,其中选择位置进行渲染比较繁琐。所以我将画表格分为几部分来画1、先定图片大小图片的高…

  • 第一个Java项目———Java实现简单图书管理系统(GUI)

    第一个Java项目———Java实现简单图书管理系统(GUI)暑假写了个图书管理系统,编译器用的是eclipse,加入了WindowBuilder插件做界面(做的特丑),数据库用的是MySQL。实现了图书的查询,借阅,归还,删除,增加。用户的删除,查询。分为管理员和用户。一,程序整体框架从项目开始,无从下手,随着学习的深入,慢慢的熟悉了开发流程,先把整体框架搭起来,这个过程可以减少后续的一些麻烦,做数据库前先想好需求,…

  • 平稳信号 小波变换什么意思_连续小波变换和离散小波变换

    平稳信号 小波变换什么意思_连续小波变换和离散小波变换1:什么是平稳信号首先必须了解什么叫做信号的平稳性,这个概念是诸多信号处理领域中的重要概念。如果信号的频率成分不随时间的变换而发生改变,那么该信号就被称为平稳信号。换言之,平稳信号的频率成分是稳定的,在这种情况下,不需要拍知道某一时刻信号的频率成分,因为它们已经是完全已知的了。

    2022年10月24日
  • YUV介绍

    YUV介绍YUV表示的含义人们常用RGB表示三基色,而且RGB也可以表示出所有颜色。但视觉心理学研究表明,人眼主要是对光的感知,人的视觉系统对光的感知程度用亮度(luminance)和色度(chrominance)两个属性表示,也就是我们常说的YUV。Y就是亮度感知,而色度感知分为两个属性:色相(hue)和色饱和度(saturation)。色相也就是U,是由光波的峰值定义的,描述的是光的颜色;色饱和度V…

  • MSDP,Anycast — overview

    MSDP,Anycast — overviewMSDP,Anycast–overviewIPmulticastisdeployedasanintegralcomponentinmission-criticalnetworkedapplicationsthroughouttheworld.Theseapplicationsmustberobust,hardened,andsc

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号