关于使用ViewStub

2018-05-16  本文已影响0人  牵着蜗牛散步Zz

介绍:

ViewStub就是一个宽高都为0的一个View,它默认是不可见的。只有通过调用 setVisibility() 函数或者 Inflate() 函数才会将其要装载的目标布局给加载出来,从而达到延迟加载的效果。在ViewStub布局可显示之前,系统不会消耗资源去实例化里面的布局,可以节省系统资源消耗。

使用:

 <ViewStub  
        android:id="@+id/viewstub"  
        android:layout_width="wrap_content"  
        android:layout_height="wrap_content"  
        android:inflatedId="@+id/inflatedview"  
        android:layout="@layout/net_error_view"/>

使用下面的两种方式来加载ViewStup并获取布局控件

private View netErrorView;  
  
ViewStub viewStub = (ViewStub) findViewById(R.id.viewstub);  
netErrorView = viewStub.inflate();    
viewStub.setVisibility(View.VISIBLE);  
netErrorView = findViewById(R.id.inflatedview);  

在使用第一种方式的时候,如果获取到viewStub对象并调用inflate来加载viewStub之后,viewStub就消失了,如果这时候还通过viewStub对象来进行操作就会报空指针的错误,所以“ViewStub viewStub = (ViewStub) findViewById(R.id.viewstub);”这句话只能执行一次。

另外说明一下在使用过程中遇到的两个错误:
1、must have a valid layoutResource
布局中layout标签用错了
layout="@layout/net_error_view" 改为android:layout="@layout/net_error_view"

2、ViewStub must have a non-null ViewGroup viewParent
这就是上面提到的问题了,ViewStub在加载了之后就变为空了。

上一篇 下一篇

猜你喜欢

热点阅读