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"    /><Buttonandroid: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() {@Overridepublic void onClick(View v) {//vs.inflate();//多次点击出错vs.setVisibility(View.VISIBLE);}});        btn2.setOnClickListener(new OnClickListener() {@Overridepublic 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不会报错

更多相关文章

  1. Android [Camera 源码] 相机 HAL3(Camera3) Google官方文档(二)
  2. Android布局优化
  3. android蜂巢效果、环形菜单、Kotlin影视应用、简约时钟、查看导
  4. 面试---AMS在Android起到什么作用,简单的分析下Android的源码
  5. 纯CSS3实现的Android Logo~~源码来鸟~
  6. Android主流三方库源码分析(一、深入理解OKHttp源码)
  7. android告别篇-对于源码我的一些看法
  8. android布局基础及范例(二):人人android九宫格布局
  9. Android 软键盘在有scollview,纵向viewpager+recyclview实现列表,

随机推荐

  1. Android多线程下载远程图片【转】
  2. 转:Android Studio Error:Connection time
  3. MD5加密,java工具类 String 转变成MD5 St
  4. 没有包lib32z1,lib32ncurses5,lib32stdc+
  5. Android TextView设置字体风格
  6. 如何在Fragment中的WebView中添加“Go Ba
  7. Android自定义控件——开源组件SlidingMe
  8. Android自动化测试学习路线
  9. 使用scala编写Android项目
  10. 在服务中设置服务重复时间