ViewStub学习总结

最近参与了新项目,有很多之前没有接触到知识点,比如 ViewStub,可以延迟加载布局资源,主要用来提升布局性能。

VIewStub是什么

A ViewStub is an invisible, zero-sized View that can be used to lazily inflate layout resources at runtime.

使用场景:

  • 用于网络请求页面失败的显示。一般情况下若要实现一个网络请求失败的页面,通常我们会使用两个View,一个隐藏,一个显示。试想一下,如果网络状况良好,并不需要加载失败页面,但是此页面确确实实已经加载完了,无非只是隐藏看不见而已。如果使用ViewStub,在需要的时候才进行加载,就可以达到节约内存提高性能的目的。

  • 一个ListView包含了多个Item,每个Item又包含了各自对应的子item,但是子item的View不是一定要显示的,只有在点击展开按钮才真正需要加载.如果默认加载子话题的View,则会造成内存的占用和CPU的消耗,这时候ViewStub就派上用场了。

ViewStub如何使用


mViewStub = findViewById(R.id.view_stub);
View view = mViewStub.inflate();
//mViewStub.setVisibility(View.VISIBLE);
//一旦加载布局完成后,ViewStub会从当前布局层级中删除

遇到的问题

java.lang.IllegalArgumentException: ViewStub must have a valid layoutResource

仔细检查代码:ViewStub标签中未设置android:layout属性

 android:layout="@layout/view_stub_layout"

需要与include标签的layout的属性区分:

ayout="@layout/view_stub_layout"

参考博客

https://droidyue.com/blog/2016/09/11/using-viewstub-in-android-to-improve-layout-performance/

你可能感兴趣的:(ViewStub学习总结)