首页
技术博客
PHP教程
数据库技术
前端开发
HTML5
Nginx
php论坛
新用户注册
|
会员登录
PHP教程
技术博客
编程问答
PNG素材
编程语言
前端技术
Android
PHP教程
HTML5教程
数据库
Linux技术
Nginx技术
PHP安全
WebSerer
职场攻略
JavaScript
开放平台
业界资讯
大话程序猿
登录
极速注册
取消
热门标签 | HotTags
android
xml
phonegap
webview
java
dialog
apk
json
crash
eclipse
build
android-studio
当前位置:
开发笔记
>
Android
> 正文
Android开发技巧之ViewStub控件惰性装载
作者:dfadsgafg4 | 来源:互联网 | 2021-08-04 15:02
布局文件中的控件并不一定在程序启动时全都用到,有一些控件只在特定的情况下才会被使用到;我们急需一种机制来改变<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
写下你的评论吧 !
吐个槽吧,看都看了
会员登录
|
用户注册
推荐阅读
apk
Android 九宫格布局详解及实现:人人网应用示例
本文深入探讨了人人网Android应用中独特的九宫格布局设计,解析其背后的GridView实现原理,并提供详细的代码示例。这种布局方式不仅美观大方,而且在现代Android应用中较为少见,值得开发者借鉴。 ...
[详细]
蜡笔小新 2024-12-28 11:23:01
java
优化ListView性能
本文深入探讨了如何通过多种技术手段优化ListView的性能,包括视图复用、ViewHolder模式、分批加载数据、图片优化及内存管理等。这些方法能够显著提升应用的响应速度和用户体验。 ...
[详细]
蜡笔小新 2024-12-28 10:36:30
java
Android LED 数字字体的应用与实现
本文介绍了一种适用于 Android 应用的 LED 数字字体(digital font),并详细描述了其在 UI 设计中的应用场景及其实现方法。这种字体常用于视频、广告倒计时等场景,能够增强视觉效果。 ...
[详细]
蜡笔小新 2024-12-27 10:34:22
apk
RecyclerView初步学习(一)
RecyclerView初步学习(一)ReCyclerView提供了一种插件式的编程模式,除了提供ViewHolder缓存模式,还可以自定义动画,分割符,布局样式,相比于传统的ListVi ...
[详细]
蜡笔小新 2024-12-26 20:24:01
xml
PHP检测AJAX请求的有效方法
本文详细介绍了如何使用PHP检测AJAX请求,通过分析预定义服务器变量来判断请求是否来自XMLHttpRequest。此方法简单实用,适用于各种Web开发场景。 ...
[详细]
蜡笔小新 2024-12-27 21:20:10
build
网络链路质量监控:Smokeping部署与配置
本文详细介绍了如何在Linux系统上安装和配置Smokeping,以实现对网络链路质量的实时监控。通过详细的步骤和必要的依赖包安装,确保用户能够顺利完成部署并优化其网络性能监控。 ...
[详细]
蜡笔小新 2024-12-27 19:31:05
json
RESTful API 与传统接口的主要区别
本文探讨了 RESTful API 和传统接口之间的关键差异,解释了为什么 RESTful API 在设计和实现上具有独特的优势。 ...
[详细]
蜡笔小新 2024-12-27 15:33:42
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
dfadsgafg4
这个家伙很懒,什么也没留下!
Tags | 热门标签
android
xml
phonegap
webview
java
dialog
apk
json
crash
eclipse
build
android-studio
RankList | 热门文章
1
【PyTorch深度学习项目实战100例】—— 基于ResNet101实现猴痘病毒识别任务 | 第31例
2
CSS Specificity(特殊性)
3
WPF自定义表格控件(动态添加/删除行)
4
0301自顶向下风格_编程
5
开发笔记:如何实现单点登录 ?
6
听说飞行尾迹也会污染环境真的吗?
7
TWebBrowser 与 MSHTML(1): 从 TWebBrowser 获取 DOM 中的 window 对象
8
微信云控开发SDK使用教程–手机机端回传检测清粉好友数通知服务端
9
如何手动彻底卸载虚拟机
10
Spring理解,不理解底层的上层,都比较空虚吧。
11
实现Istio13:Istio基础认证讲析
12
css样式怎么画梯形按钮,css怎么做梯形
13
浅谈压缩感知(二十八):压缩感知重构算法之广义正交匹配追踪(gOMP)
14
测自己能考上什么大学!2022免费测高考大学录取概率
15
elk analyse message
PHP1.CN | 中国最专业的PHP中文社区 |
DevBox开发工具箱
|
json解析格式化
|
PHP资讯
|
PHP教程
|
数据库技术
|
服务器技术
|
前端开发技术
|
PHP框架
|
开发工具
|
在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved |
京公网安备 11010802041100号
|
京ICP备19059560号-4
| PHP1.CN 第一PHP社区 版权所有