利用ViewStub显示和隐藏布局
ViewStub的引入:
在开发的时候,有些布局是要根据条件而动态显示,达到一个布局两用的效果, 运用View.VISIBLEView.GONE去改变布局的可见性. 这样的做法显然是没什么多大的问题,优点逻辑清晰,控制灵活,但缺点就是耗费资源 在setContentView()或者用inflate加载布局文件时无论View是否 被设置为View.GONE和View.VISIBLE,都会建对象,占用一定程度上的内存,所以在考虑优化程序的时候, 尽量避免资源浪费,降低程序的资源占有量,提高响应速度,提升软件的用户体验所以建议使用viewstub
遇到的问题:
报错 ViewStub must have a non-null ViewGroup viewParent
原因:
官方文档:viewstub不能反复inflate,只能inflate一次
解决办法很简单,当inflate过进行标识,下次在使用的时候判断下,是否inflate了,如果有直接用,这样就可以避免
重复inflate了。是不是感觉viewsub非常好用,消耗性能低,不用每次都去inflate
参考blog
http://blog.youkuaiyun.com/hitlion2008/article/details/6737537
private void leftViewInit() {
// viewsub 只能inflate一次
leftView = leftViewStub.inflate();
imgLeft = (ImageView) findViewById(R.id.imgLeft);
imgLeft.setOnClickListener(this);
leftIsInflate = true;//标识下
}
public void setLeftButton(int res) {
if (!leftIsInflate) {//如果已经inflate过就不用在进行重复的inflate
leftViewInit();
}
if (res > 0) {
imgLeft.setBackgroundResource(res);
}
}