ViewStub的一些使用空指针问题

本文探讨了在使用ViewStub时可能导致空指针异常的问题。关键点在于,ViewStub被inflate后会被布局的View替换,因此应当在ViewStub内部设置属性,而不是在layout的View中。正确使用ViewStub的方法包括在inflate后立即设置属性,或者通过inflatedId获取新加载的View。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

废话不说直接上代码

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值