2011.09.22——— android ViewStub的简单使用
参考:
http://www.cnblogs.com/xirihanlin/archive/2010/04/28/1723291.html
http://www.eoeandroid.com/forum.php?mod=viewthread&tid=100417&extra=page%3D1%26filter%3Dauthor%26orderby%3Ddateline%26orderby%3Ddateline
ViewStub组件和<include>标签的作用类似,主要是为了提高布局的重用性,及布局的模块化。它们之间最大的差别是,ViewStub中的布局不会随着它所在布局的渲染而渲染,而<include>标签中的布局会随着它所在布局的渲染而渲染,ViewStub中的布局只有在你需要的时候才会渲染到主界面中。
1、xml
main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/hello"
/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/btn"
android:text="显示"
/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/btn2"
android:text="btn2"
/>
<ViewStub
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/vs"
android:layout="@layout/viewstub"
/>
</LinearLayout>
viewstub.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/hello"
/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/btn3"
android:text="other btn"
/>
</LinearLayout>
2、MainActivity.java
package com.lp.viewStub;
import android.app.Activity;
import android.opengl.Visibility;
import android.os.Bundle;
import android.view.View;
import android.view.ViewStub;
import android.view.View.OnClickListener;
import android.widget.Button;
public class MainActivity extends Activity {
private Button btn;
private Button btn2;
private ViewStub vs;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
vs = (ViewStub)findViewById(R.id.vs);
btn = (Button)findViewById(R.id.btn);
btn2 = (Button)findViewById(R.id.btn2);
btn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
//vs.inflate();//多次点击出错
vs.setVisibility(View.VISIBLE);
}
});
btn2.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
vs.setVisibility(View.GONE);
}
});
}
}
这样既可以用了
另外 我在写的时候 的几个问题
1、多次调用inflate()错误
当你掉 mViewStub.inflate()的时候 已经用你viewStub里面指定的layout替代了ViewStub ,换句话说 ViewStub已经不在main.xml里面 在inflate()源码里面 会判断
final ViewParent viewParent = getParent();
if (viewParent != null && viewParent instanceof ViewGroup) {
这时候 getParent()就是null了 所以你再一次点击 就会报错了
2、调用vs.setVisibility(View.VISIBLE);可以多次点击
在源码当中
super.setVisibility(visibility);
inflate();
先不显示 然后才调用Inflate() 所以ViewStub可能还在main.xml里面吧 所以getParent不会报错
分享到:
相关推荐
在Android开发中,ViewStub是一个轻量级的组件,它允许开发者延迟加载和初始化布局。ViewStub不占用屏幕空间,直到被显式地设置为可见或者调用`inflate()`方法时,才会加载指定的布局并将其插入到父视图中。这种特性...
在DataBinding中使用ViewStub,首先需要在XML布局文件中定义ViewStub,并设置`android:layout`属性来指定要加载的子布局资源。例如: ```xml <layout xmlns:android="http://schemas.android.com/apk/res/android">...
在Android开发中,ViewStub是一个轻量级的组件,它在布局文件中占用的空间为0,不会参与初始化时的视图加载。ViewStub通常用于延迟加载或者动态插入视图,尤其适用于实现页面状态的动态切换,如空状态、错误状态、...
在Android开发中,ViewStub是一个轻量级的组件,它在初始加载时并不可见,不占用任何空间,常用于延迟加载布局或者实现布局复用。这个简单的示例旨在教你如何在项目中有效地利用ViewStub。 首先,了解ViewStub的...
### Android中的ViewStub详解 #### 一、概述 在Android开发过程中,为了提高应用的性能和用户体验,开发者经常需要对应用程序进行各种优化处理。其中,`ViewStub`作为Android框架提供的一个工具类,可以帮助开发者...
本篇文章将详细探讨ViewStub的使用方法及其在UI优化中的作用。 **一、ViewStub的基本概念** ViewStub是一个不可见且不占用屏幕空间的视图,它主要用于在运行时动态地加载其他布局。由于它在初始化时不进行任何布局...
在"ViewStubDemo"这个压缩包文件中,很可能包含了演示ViewStub使用的一个简单示例项目,可能包括了XML布局文件和对应的Java代码,开发者可以通过查看和运行这个示例来更好地理解ViewStub的工作原理和用法。...
这个压缩包文件"安卓Android源码——android 仿真翻页效果.rar"可能包含了一个示例项目,用于演示如何在Android平台上创建这种动态、逼真的翻页动画。以下将详细介绍实现这种效果的关键知识点。 1. **页面滑动...
"ViewStub_Tab.rar_Tabú_android tab"这个资源包显然提供了一个利用ViewStub实现Tab功能的示例。ViewStub是Android SDK中一个轻量级的视图组件,通常用于延迟加载和隐藏视图,它占用极小的内存和布局空间。在这里,...
ViewStub是Android布局优化中一个很不错的标签/控件,直接继承自View。虽然Android开发人员基本上都听说过,但是真正用的可能不多。 ViewStub可以理解成一个非常轻量级的View,与其他的控件一样,有着自己的属性及...
在安卓开发中,Android系统提供了一个强大的布局管理器——TableLayout,它允许开发者在界面上创建表格形式的布局。这个“安卓Android源码——android动态添加表格行.rar”压缩包包含了一个示例项目,名为...
ViewStub在Android开发中是一个非常实用的轻量级组件,常用于延迟加载或者动态加载一些不常用但必不可少的UI元素。这个组件默认是不可见的,并且占据的布局空间几乎可以忽略不计,直到被激活时才会加载并显示在界面...
在Android开发中,动态添加控件和使用ViewStub是两种非常实用的技术,它们极大地提高了界面的灵活性和可扩展性。动态添加控件允许开发者在运行时根据需要创建和添加组件,而ViewStub则是一种轻量级的视图,用于延迟...
这时,ViewStub就派上用场了,我们可以将每个Tab的详细内容放入一个单独的布局文件,然后在用户切换到对应Tab时才使用ViewStub加载。 步骤如下: 1. 创建XML布局文件:首先,为每个Tab创建一个XML布局文件,例如`...
- ViewStub有两个关键属性:`android:layout`和`android:inflatedId`,分别用于指定要加载的布局资源ID和加载后视图的ID。 2. **在ListView中使用ViewStub** - 当ListView项需要根据特定条件显示或隐藏某些复杂...
在Android开发中,`ViewStub` 是一个非常实用但经常被忽视的组件。它是一个轻量级的视图,主要用于延迟加载和初始化视图。在本文中,我们将深入理解`ViewStub`的工作原理,以及如何在实际项目中使用它。 **一、...
ViewStub是Android开发中一种特殊的轻量级控件,它在布局文件中占用的空间为0,不会参与初始化时的视图构建,直到被显式地`inflate`或设置了`android:layout_width`和`android:layout_height`属性后才会被加载。...
Android 在 layout xml 中使用 ViewStub 完成动态加载问题 Android 中的动态加载问题是指在应用程序中根据不同的条件来决定显示哪个 View 或某个布局的问题。在 Android 中,通常的做法是把可能用到的 View 都写在...
优化布局的方法包括使用`include`、`merge`和`ViewStub`标签,避免冗余的嵌套布局,用`GONE`代替`INVISIBLE`,以及在使用`weight`属性时将宽度和高度设为`0dp`以减少计算。 3. **列表和Adapter的优化** 在处理...
本文将重点介绍一种特殊的布局组件——`ViewStub`,它是Android提供的一种轻量级、延迟加载的视图,用于解决复杂布局中减少不必要的资源消耗问题。 `ViewStub`是一个不可见的、占用空间极小的视图对象,它在初始化...