- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章Android开发技巧之ViewStub控件惰性装载由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
在4.5.6节介绍过一个<include>标签,该标签可以在布局文件中引用另外一个布局文件,并可以覆盖被引用布局文件根节点所有与布局相关的属性,也就是以android:layout开头的属性。通过<include>标签可以将一个非常庞大的布局文件分解成若干个较小的布局文件,而且这些小的布局文件也可以被多次引用,从而达到一个重用的目的。 <include>标签固然很好用,但有一个问题,就是布局文件中的控件并不一定在程序启动时全都用到,有一些控件只在特定的情况下才会被使用到。例如,一个阅读图书的软件只有在下载电子书时才需要显示进度条,在平时看书时都是装载的本地电子书,并不需要使用进度条。因此,在程序启动时完全可以先不加载这个进度条。但使用<include>标签引用这个包含进度条的布局文件时,不管三七二十一,将所有的控件全部装载到了内存中。也许有的读者会说,一个进度条占用不了多少系统资源,都装载也无所谓。这些读者也许是对的,但如果装载的不是进度条,而是很多imageview控件(显示了很大的图像),并且还不是在一个地方装载,那恐怕就会将可怜的手机资源消耗殆尽了。因此,我们急需一种机制来改变<include>标签的这种行为,只在需要时装载控件。这种机制就是本节要介绍的viewstub控件。 viewstub是不可视的控件,它的作用与<include>标签基本相同,在布局文件中使用<viewstub>标签来引用其他的布局文件。但与<include>唯一的不同是viewstub并不会马上装载引用的布局文件。只有在调用了viewstub.inflate或viewstub.setvisibility(view.visible)方法后,viewstub才会装载引用的控件,下面先看两个布局文件。 main.xml 。
复制代码 代码如下
<?xmlversion="1.0"encoding="utf-8"?> <linearlayoutxmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical"android:layout_width="fill_parent" android:layout_height="fill_parent"> <buttonandroid:layout_width="fill_parent" android:layout_height="wrap_content"android:text="我的按钮" android:onclick="onclick_button"/> <includelayout="@layout/custom"/> </linearlayout> 。
custom.xml 。
复制代码 代码如下
<?xmlversion="1.0"encoding="utf-8"?> <linearlayoutxmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical"android:layout_width="fill_parent" android:layout_height="fill_parent"> <buttonandroid:layout_width="fill_parent" android:layout_height="wrap_content"android:text="按钮1"/> <buttonandroid:layout_width="fill_parent" android:layout_height="wrap_content"android:text="按钮2"/> </linearlayout> 。
在main.xml文件中使用了<include>标签来引用custom.xml,在这种情况下,屏幕上会立即显示三个如图5.56所示的按钮。如果将<include>标签换成如下的代码,在程序启动时,只会显示在main.xml文件中的定义按钮,如图5.57所示.
复制代码 代码如下
<viewstubandroid:id="@+id/viewstub"android:inflatedid="@+id/button_layout" android:layout="@layout/custom"android:layout_width="fill_parent" android:layout_height="wrap_content"/> 。
图5.56 使用<include>标签装载控件 图5.56使用<viewstub>标签装载控件 在使用<viewstub>标签引用布局文件后,还需要调用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完全一样。 注意:<viewstub>与<include>标签一样,也可以设置所引用布局文件中根节点所有与布局相关的属性。所不同的是<include>标签的android:id属性直接覆盖了所引用布局文件中根节点的android:id属性值,而<viewstub>标签的android:id属性与普通控件标签的android:id属性一样,用于在代码中引用控件。在<viewstub>标签中需要使用android:inflatedid属性覆盖所引用布局文件中根节点的android:id属性值。虽然<viewstub>可完全取代<include>,但唯一的不足是<viewstub>目前还无法取代<merge>.
最后此篇关于Android开发技巧之ViewStub控件惰性装载的文章就讲到这里了,如果你想了解更多关于Android开发技巧之ViewStub控件惰性装载的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
我想实现自定义搜索,但遇到了一个麻烦。我需要将 UIButton、SearchBar 组合在一个控件中,以便我可以通过指针引用它。然后我将向该组合控件动态添加更多 UIbutton。最重要的是,我想将
它没有在我的方法中执行 if block 中的语句 母版页:- 页面加载事件:- Control c = new Control(); DoSomething(c); 我的方法:- protecte
ComboBox 控件有一个 setConverter 方法,请参阅 JavaFX ComboBox - Display text but return ID on selection举个例子。我正在
我没有找到任何包含用于标记化(标记)文本输入的控件的 wpf 库。也许我找不到库,因为我错误地调用了这个组件。怎么叫或者哪里有这样的库? 最佳答案 DevExpress WPF 库包含多个数据编辑控件
是否有 Silverlight 控件允许您输入文本并将其突出显示为代码? 例如: foreach (client in Clients){ client.Save();} would become
我有以下用户控件 a) Panel.ZIndex="99999999" 是否是将此控件设置为该控件中 TopMost 的正
是否可以在 Windows 窗体中使用 C# 在窗体加载时隐藏所有特定控件,例如标签或按钮,然后选择显示我不想显示的那些? 我有一个包含很多按钮和标签的程序,但我只想在加载时显示一两个,我觉得对每个标
这个问题已经有答案了: 已关闭11 年前。 Possible Duplicate: Duplicating components at Run-Time 我有一个TMyControl ( Contro
我正在尝试在 Delphi 中编写一个 dll 库,其中包含一个创建 TFrame 后代实例并返回它的函数。但是当我在应用程序中导入这个函数时,每次调用它时,我都会得到一个异常,例如“'xxx'控件没
是否有 Win32 API 调用来确定哪些窗口和/或控件在特定坐标和/或鼠标下可见? 最佳答案 您可以使用GetWindowFromPoint 。它将返回窗口句柄,以便您可以使用 GetClassNa
我需要在编辑控件中输入以下公式: 公式是在 MS Word 中制作的。尝试将其复制/粘贴到编辑控件(单行或多行)后,我得到 M 0.33 Q10T9.1-9.7。 当我输入这个时,我正在研究 Rich
我只是想成功地将它添加到我的窗口中,但这却出奇地困难。 我已经尝试过 #include "windef.h" #include "winbase.h" #include "initguid.h" #i
我希望能够使用 google maps api v3 拥有自己的“街景”按钮。单击按钮时,我希望它根据我的标记经纬度加载街景。然后我希望按钮更改为“返回 map ”,然后再次加载默认 map View
我目前正在用 PHP 开发(另一个)开源 CMS,我想使用 javascript 控件,尤其是管理面板。问题是,是否有任何具有 PHP 接口(interface)的开源、可自由分发的控件(用于创建 j
我为其编写软件的产品之一是会计类应用程序。它用 C++ 编写,使用 C++ Builder 和 VCL 控件,连接到运行在 Linux 上的 PostgreSQL 数据库。 PostgreSQL 数据
我使用 Key Listener 来读取用户的输入,但我遇到了问题。首先,我读到 JTextField“请输入您的姓名”。如果用户输入一个名字,例如 John,它将更改为 John。但是,如果用户输入
我正在尝试对齐数据表列中的复选框(h=center,v=middle) ... 但复选框仍然显示在错误的位置(见附图)
我有一个包含统计信息的 JSON 数据树: { prefix: "a", count: 20, children: [ { prefix: "a:b", c
我在 Photoshop 中设计了一个模型,我打算将它应用到我的产品目录的 ListView 控件中,但它似乎没有正确显示(未对齐?),我希望这里的人可以像我一样指出我的错误试图弄清楚无济于事。 预期
您是使用 ASP.NET 控件还是仅使用带有 CSS 的 HTML? 我在 TextBox 和 DropDownList 的宽度方面遇到了一些问题。在不同的浏览器中,宽度会有所不同,控件的大小也不会相
我是一名优秀的程序员,十分优秀!