首页
技术博客
PHP教程
数据库技术
前端开发
HTML5
Nginx
php论坛
新用户注册
|
会员登录
PHP教程
技术博客
编程问答
PNG素材
编程语言
前端技术
Android
PHP教程
HTML5教程
数据库
Linux技术
Nginx技术
PHP安全
WebSerer
职场攻略
JavaScript
开放平台
业界资讯
大话程序猿
登录
极速注册
取消
热门标签 | HotTags
phonegap
android-studio
xml
java
dialog
webview
crash
android
json
apk
build
eclipse
当前位置:
开发笔记
>
Android
> 正文
Android开发技巧之ViewStub控件惰性装载
作者:纯洁的老宁同志 | 来源:互联网 | 2021-08-15 19:22
布局文件中的控件并不一定在程序启动时全都用到,有一些控件只在特定的情况下才会被使用到;我们急需一种机制来改变<include>标签的这种行为,只在需要时装载控件。这种机制就是本节要介绍的ViewStub控件
在4.5.6节介绍过一个
标签,该标签可以在布局文件中引用另外一个布局文件,并可以覆盖被引用布局文件根节点所有与布局相关的属性,也就是以android:layout开头的属性。通过
标签可以将一个非常庞大的布局文件分解成若干个较小的布局文件,而且这些小的布局文件也可以被多次引用,从而达到一个重用的目的。
标签固然很好用,但有一个问题,就是布局文件中的控件并不一定在程序启动时全都用到,有一些控件只在特定的情况下才会被使用到。例如,一个阅读图书的软件只有在下载电子书时才需要显示进度条,在平时看书时都是装载的本地电子书,并不需要使用进度条。因此,在程序启动时完全可以先不加载这个进度条。但使用
标签引用这个包含进度条的布局文件时,不管三七二十一,将所有的控件全部装载到了内存中。也许有的读者会说,一个进度条占用不了多少系统资源,都装载也无所谓。这些读者也许是对的,但如果装载的不是进度条,而是很多ImageView控件(显示了很大的图像),并且还不是在一个地方装载,那恐怕就会将可怜的手机资源消耗殆尽了。因此,我们急需一种机制来改变
标签的这种行为,只在需要时装载控件。这种机制就是本节要介绍的ViewStub控件。
ViewStub是不可视的控件,它的作用与
标签基本相同,在布局文件中使用
标签来引用其他的布局文件。但与
唯一的不同是ViewStub并不会马上装载引用的布局文件。只有在调用了ViewStub.inflate或ViewStub.setVisibility(View.VISIBLE)方法后,ViewStub才会装载引用的控件,下面先看两个布局文件。
main.xml
代码如下:
android:orientation="vertical"android:layout_
android:layout_>
android:layout_android:text="我的按钮"
android:OnClick="onClick_Button"/>
custom.xml
代码如下:
android:orientation="vertical"android:layout_
android:layout_>
android:layout_android:text="按钮1"/>
android:layout_android:text="按钮2"/>
在main.xml文件中使用了
标签来引用custom.xml,在这种情况下,屏幕上会立即显示三个如图5.56所示的按钮。如果将
标签换成如下的代码,在程序启动时,只会显示在main.xml文件中的定义按钮,如图5.57所示。
代码如下:
android:layout="@layout/custom"android:layout_
android:layout_/>
图5.56 使用
标签装载控件
图5.56使用
标签装载控件
在使用
标签引用布局文件后,还需要调用ViewStub.inflate或ViewStub.setVisibility(View.VISIBLE)方法才能装载所引用的控件,代码如下:
代码如下:
publicvoidonClick_Button(Viewv)
{
//ViesStub控件只能获得一次,第二次再使用findViewById获得该ViewStub对象,则返回null
Viewview=findViewById(R.id.viewstub);
if(view!=null)
{
//或调用ViewStub.inflate方法
//view=((ViewStub)view).inflate();
//装载ViewStub引用的custom.xml文件中的控件
((ViewStub)view).setVisibility(View.VISIBLE);
}
else
{
setTitle("viewisnull");
}
}
单击“我的按钮”后,会显示在custom.xml文件中定义的两个按钮,效果与图5.56完全一样。
注意
:
与
标签一样,也可以设置所引用布局文件中根节点所有与布局相关的属性。所不同的是
标签的android:id属性直接覆盖了所引用布局文件中根节点的android:id属性值,而
标签的android:id属性与普通控件标签的android:id属性一样,用于在代码中引用控件。在
标签中需要使用android:inflatedId属性覆盖所引用布局文件中根节点的android:id属性值。虽然
可完全取代
,但唯一的不足是
目前还无法取代
。
android
xml
写下你的评论吧 !
吐个槽吧,看都看了
会员登录
|
用户注册
推荐阅读
android
Android LED 数字字体的应用与实现
本文介绍了一种适用于 Android 应用的 LED 数字字体(digital font),并详细描述了其在 UI 设计中的应用场景及其实现方法。这种字体常用于视频、广告倒计时等场景,能够增强视觉效果。 ...
[详细]
蜡笔小新 2024-12-27 10:34:22
android
优化ListView性能
本文深入探讨了如何通过多种技术手段优化ListView的性能,包括视图复用、ViewHolder模式、分批加载数据、图片优化及内存管理等。这些方法能够显著提升应用的响应速度和用户体验。 ...
[详细]
蜡笔小新 2024-12-28 10:36:30
apk
RecyclerView初步学习(一)
RecyclerView初步学习(一)ReCyclerView提供了一种插件式的编程模式,除了提供ViewHolder缓存模式,还可以自定义动画,分割符,布局样式,相比于传统的ListVi ...
[详细]
蜡笔小新 2024-12-26 20:24:01
android
2018回顾与2019展望
本文总结了2018年的关键成就,包括职业变动、购车、考取驾照等重要事件,并分享了读书、工作、家庭和朋友方面的感悟。同时,展望2019年,制定了健康、软实力提升和技术学习的具体目标。 ...
[详细]
蜡笔小新 2024-12-28 09:10:26
android
CSS 布局:液态三栏混合宽度布局
本文介绍了如何使用 CSS 实现液态的三栏布局,其中各栏具有不同的宽度设置。通过调整容器和内容区域的属性,可以实现灵活且响应式的网页设计。 ...
[详细]
蜡笔小新 2024-12-28 02:40:28
build
网络链路质量监控:Smokeping部署与配置
本文详细介绍了如何在Linux系统上安装和配置Smokeping,以实现对网络链路质量的实时监控。通过详细的步骤和必要的依赖包安装,确保用户能够顺利完成部署并优化其网络性能监控。 ...
[详细]
蜡笔小新 2024-12-27 19:31:05
java
Spring Boot快速入门与应用
本文详细介绍了如何使用Spring Boot进行高效开发,涵盖了配置、实例化容器以及核心注解的使用方法。 ...
[详细]
蜡笔小新 2024-12-27 15:28:29
java
Java面试题解析
本文详细介绍了Java编程语言中的核心概念和常见面试问题,包括集合类、数据结构、线程处理、Java虚拟机(JVM)、HTTP协议以及Git操作等方面的内容。通过深入分析每个主题,帮助读者更好地理解Java的关键特性和最佳实践。 ...
[详细]
蜡笔小新 2024-12-27 13:55:14
xml
Python自动化处理:从Word文档提取内容并生成带水印的PDF
本文介绍如何利用Python实现从特定网站下载Word文档,去除水印并添加自定义水印,最终将文档转换为PDF格式。该方法适用于批量处理和自动化需求。 ...
[详细]
蜡笔小新 2024-12-27 13:10:20
java
MyBatis:深入解析与应用
在当前众多持久层框架中,MyBatis(前身为iBatis)凭借其轻量级、易用性和对SQL的直接支持,成为许多开发者的首选。本文将详细探讨MyBatis的核心概念、设计理念及其优势。 ...
[详细]
蜡笔小新 2024-12-27 12:17:16
java
将Web服务部署到Tomcat
本文介绍了如何在JDeveloper 12c中创建一个Java项目,并将其打包为Web服务,然后部署到Tomcat服务器。内容涵盖从项目创建、编写Web服务代码、配置相关XML文件到最终的本地部署和验证。 ...
[详细]
蜡笔小新 2024-12-27 11:48:15
xml
XNA 3.0 游戏编程:从 XML 文件加载数据
本文介绍如何在 XNA 3.0 游戏项目中从 XML 文件加载数据。我们将探讨如何将 XML 数据序列化为二进制文件,并通过内容管道加载到游戏中。此外,还会涉及自定义类型读取器和写入器的实现。 ...
[详细]
蜡笔小新 2024-12-27 11:39:44
xml
C# 教程:Unity 中通过 XML 配置文件传递参数给自定义生命周期构造函数
本文介绍如何在 Unity 的 XML 配置文件中,将参数传递给自定义生命周期管理器的构造函数。我们将详细探讨 CustomLifetimeManager 类的实现及其配置方法。 ...
[详细]
蜡笔小新 2024-12-26 17:21:54
java
深入解析 org.apache.xmlbeans.SchemaType.getBaseEnumType() 方法及其应用
本文详细介绍了 Java 中 org.apache.xmlbeans.SchemaType 类的 getBaseEnumType() 方法,提供了多个代码示例,并解释了其在不同场景下的使用方法。 ...
[详细]
蜡笔小新 2024-12-26 11:46:55
java
解决MyBatis Mapper绑定异常:org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)
本文详细介绍了如何解决MyBatis中常见的BindingException错误,提供了多种排查和修复方法,确保Mapper接口与XML文件的正确配置。 ...
[详细]
蜡笔小新 2024-12-25 19:42:47
纯洁的老宁同志
这个家伙很懒,什么也没留下!
Tags | 热门标签
phonegap
android-studio
xml
java
dialog
webview
crash
android
json
apk
build
eclipse
RankList | 热门文章
1
Oracle 10g 中Duplicate 复制数据库
2
Oracle 11g备份文件导入10g
3
关于ORA-01002 读取违反顺序
4
MongoDB保存Java对象的三种方法
5
如何理解Oracle中“通过角色授权”需要用户重新登陆
6
如何创建Oracle新用户(新schema)
7
浅谈Oracle执行计划
8
【Oracle笔记】4.Oracle服务器中的诊断文件
9
Ant中执行Oracle存储过程
10
ROWID走索引之判决
11
我们用db2look命令得到数据库对象的DDL 脚本
12
Linux上Oracle误删除一个没有用的dbf表空间文件
13
解决连接Oracle报ORA-01034和ORA-27101的错误
14
Oracle隐含参数scn不一致启动
15
如何使用DBMS_SCHEDULER管理计划任务JOB
PHP1.CN | 中国最专业的PHP中文社区 |
DevBox开发工具箱
|
json解析格式化
|
PHP资讯
|
PHP教程
|
数据库技术
|
服务器技术
|
前端开发技术
|
PHP框架
|
开发工具
|
在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved |
京公网安备 11010802041100号
|
京ICP备19059560号-4
| PHP1.CN 第一PHP社区 版权所有