2011.09.22——— android ViewStub的简单使用
16lz
2021-12-04
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
viewstub.xml
2、MainActivity.java
这样既可以用了
另外 我在写的时候 的几个问题
1、多次调用inflate()错误
当你掉 mViewStub.inflate()的时候 已经用你viewStub里面指定的layout替代了ViewStub ,换句话说 ViewStub已经不在main.xml里面 在inflate()源码里面 会判断
这时候 getParent()就是null了 所以你再一次点击 就会报错了
2、调用vs.setVisibility(View.VISIBLE);可以多次点击
在源码当中
先不显示 然后才调用Inflate() 所以ViewStub可能还在main.xml里面吧 所以getParent不会报错
参考: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不会报错
更多相关文章
- Android(安卓)中Service生命周期
- Android(安卓)WebView中的JavaScript调用android方法
- Android下载网络图片到本地
- Android对接webService接口
- Android(安卓)- MediaPlayer
- How to destroy an Activity in android
- Hook android系统调用研究(一)
- JS调用Java代码(Android)
- Android应用程序进程启动过程的源代码分析(2)