首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 移动开发 > 移动开发 >

ViewStub的应用示例

2013-01-23 
ViewStub的使用示例mainActivity如下:package c.cimport android.os.Bundleimport android.view.Viewim

ViewStub的使用示例

mainActivity如下:

package c.c;import android.os.Bundle;import android.view.View;import android.view.ViewStub;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.TextView;import android.app.Activity;/** * Demo描述: 利用ViewStub显示和隐藏布局 * ViewStub的引入: * 在开发的时候,有些布局是要根据条件而动态显示,达到一个布局两用的效果, * 运用View.VISIBLE和View.GONE去改变布局的可见性. * 这样的做法显然是没什么多大的问题,优点逻辑清晰,控制灵活,但缺点就是耗费资源 * 在setContentView()或者用inflate加载布局文件时无论View是否 * 被设置为View.GONE和View.VISIBLE,都会创建对象,占用一定程度上的内存,所以在考虑优化程序的时候, * 尽量避免资源浪费,降低程序的资源占有量,提高响应速度,提升软件的用户体验 *  * 推荐的做法是使用android.view.ViewStub. * ViewStub是一个轻量级的View,它一个看不见的,不占布局位置,占用资源非常小的控件. * ViewStub是一个隐藏的,不占用内存空间的视图对象,它可以在运行时延迟加载布局资源文件当 ViewStub可见,或者调用 * inflate()函数时,才会加载这个布局资源文件 注意的问题: ViewStub只能用来Inflate一个布局文件,而不是某个具体的View *  * 遇到的问题:  * 报错 ViewStub must have a non-null ViewGroup viewParent  * 原因: * 官方文档:viewstub不能反复inflate,只能inflate一次 *  * 参考资料: * http://blog.csdn.net/hitlion2008/article/details/6737537 */public class MainActivity extends Activity {    private Button mButton_show;    private Button mButton_hidden;    private ViewStub mViewStub;    private View mView=null;    private boolean isInflate=true;    @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.main);        init();    }    private void init(){    mButton_show=(Button) findViewById(R.id.button_show);    mButton_show.setOnClickListener(new ButttonClickListenerImpl());    mButton_hidden=(Button) findViewById(R.id.button_hidden);    mButton_hidden.setOnClickListener(new ButttonClickListenerImpl());    mViewStub=(ViewStub) findViewById(R.id.viewStub);    }private class ButttonClickListenerImpl implements OnClickListener {public void onClick(View v) {switch (v.getId()) {case R.id.button_show:if (isInflate) {mView=mViewStub.inflate();isInflate=false;}else {mView.setVisibility(View.VISIBLE);}                TextView textView=                (TextView) mView.findViewById(R.id.viewStub_TextView);                textView.setText("time="+System.currentTimeMillis());break;case R.id.button_hidden:                mViewStub.setVisibility(View.GONE);break;default:break;}}}}


main.xml如下:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    android:layout_width="match_parent"    android:layout_height="match_parent"     android:orientation="vertical"    >   <LinearLayout    android:layout_width="wrap_content"    android:layout_height="wrap_content"      >     <ViewStub          android:id="@+id/viewStub"         android:layout_width="wrap_content"         android:layout_height="wrap_content"          android:layout="@layout/testviewstublayout"      />   </LinearLayout>   <Button        android:id="@+id/button_show"       android:layout_width="wrap_content"       android:layout_height="wrap_content"        android:text="加载ViewStub"    />   <Button        android:id="@+id/button_hidden"       android:layout_width="wrap_content"       android:layout_height="wrap_content"        android:text="隐藏ViewStub"    /></LinearLayout>

testviewstublayout.xml.xml如下:

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:orientation="vertical" >    <TextView         android:id="@+id/viewStub_TextView"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:text="test test test"      /></LinearLayout>



 

热点排行