ViewStub的一些使用空指针问题

来源:互联网 发布:淘宝修改会员名申请书 编辑:程序博客网 时间:2024/05/16 02:03

废话不说直接上代码

<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已经被取代了。

0 0
原创粉丝点击