废话不说直接上代码
<ViewStub
android:id="@+id/vs"
android:layout_width="112dp"
android:layout_height="73dp"
android:layout_marginRight="10dp"
android:inflatedId="@+id/viewstub_column_inflated"
android:layout="@layout/viewstub_column_cover">
</ViewStub>
layout就是我们的布局文件,里面我只放了一个ImageView就不贴出来了
有些人会这样去加载
vs.inflate();
ImageView iv = (ImageView) vs.findViewById(R.id.iv);
这样iv会抛出空指针的异常,需要注意的是当ViewStub被inflate后就会被layout的View给替换掉。
所以对控件的一些属性设置要写在ViewStub里面,不要写在layout的View里面了,当inflate后,属性会被加载到View上。
正确的写法应该是
View view = vs.inflate();
ImageView iv = (ImageView) view.findViewById(R.id.iv);
inflate()被调用时, 被加载的视图会替代viewstub并且返回自己的视图对象
或是这样写
vs.inflate();
View view = finViewById(R.id.viewstub_column_inflated);
ImageView iv = (ImageView) view.findViewById(R.id.iv);
这时候就得用到inflatedId,其实inflatedId就是新加载进来的view的id,如果需要获取这个view,就要用这个inflatedId,原来的id已经被取代了。