参考:

  • ViewStub 实现懒加载,针对 visible 在初始化时不显示的布局

ViewStub 优势

  • ViewStub可以做到按需加载一个布局,我们可以控制它加载的时机,而不是在Activity的onCreate方法中去加载.即懒加载
  • 它存在于视图层级中,但只会在setVisibility和inflate方法调用只会才会填充视图,所以不会影响初始化加载速度。

合理使用ViewStub可以起到优化渲染功效

  • 将复杂的视图放入ViewStub中,不在初始化中加载

特点

  1. ViewStub是一个继承了View类的视图。
  2. ViewStub是不可见的,实际上是把宽高都设置为0
  3. 可以通过布局文件的android:inflatedId或者调用ViewStub的setInflatedId方法为懒加载视图的跟节点设置ID
  4. ViewStub视图在首次调用setVisibility或者inflate方法之前,一直存在于视图树中
  5. 只需要调用ViewStub的setVisibility或者inflate方法即可显示懒加载的视图
  6. 调用setVisibility或者inflate方法之后,懒加载的视图会把ViewStub从父节点中替换掉
  7. ViewStub的inflate只能被调用一次,第二次调用会抛出异常,setVisibility可以被调用多次,但不建议这么做(后面说原因)
  8. 为ViewStub赋值的android:layout_属性会替换待加载布局文件的根节点对应的属性
  9. inflate方法会返回待加载视图的根节点