Android布局延迟加载,Android中关于布局文件延迟加载控件ViewStub

packagecom.example.android_viewstub;importandroid.app.Activity;importandroid.os.Bundle;importandroid.view.Menu;importandroid.view.View;importandroid.view.View.OnClickListener;importandroid.view.ViewStub;importandroid.widget.Button;importandroid.widget.RatingBar;/*** 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一次

**/publicclassMainActivityextendsActivityimplementsOnClickListener {privateViewStub mViewStub;privateButton mShowButton;privateButton mHiddenButton;

@OverrideprotectedvoidonCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

findView();

bindView();

}privatevoidfindView() {

mViewStub=(ViewStub)this.findViewById(R.id.stub);

mShowButton=(Button)this.findViewById(R.id.button_show);

mHiddenButton=(Button)this.findViewById(R.id.button_hidden);

}privatevoidbindView() {

mShowButton.setOnClickListener(this);

mHiddenButton.setOnClickListener(this);

}

@OverridepublicbooleanonCreateOptionsMenu(Menu menu) {

getMenuInflater().inflate(R.menu.main, menu);returntrue;

}

@OverridepublicvoidonClick(View v) {switch(v.getId()) {caseR.id.button_show:

View inflated=mViewStub.inflate();

RatingBar ratingBar=(RatingBar) inflated

.findViewById(R.id.ratingBar);

ratingBar.setRating(4);//mViewStub.setVisibility(View.VISIBLE);break;caseR.id.button_hidden:

mViewStub.setVisibility(View.GONE);break;default:break;

}

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值