RecycleView使用出错导致RecyclerView$ViewHolder.shouldIgnore()' on a null object reference

java.lang.NullPointerException: Attempt to invoke virtual method 'boolean android.support.v7.widget.RecyclerView$ViewHolder.shouldIgnore()' on a null object reference
        at android.support.v7.widget.RecyclerView.findMinMaxChildLayoutPositions(RecyclerView.java:3989)

 

写完需求,信心满满的运行,结果启动崩溃。。。看到上面的错误信息一脸懵逼,于是在网上开始搜寻,这,到底是为什么?

经过一番搜寻和尝试,终于找到了这篇帖子,http://osask.cn/front/ask/view/579034,错误是因为将一个新的RecyclerView.LayoutParams设置为项目的rootview 

excuse me,查一下布局,这肯定是不可能的呀,然后看了一下adapter代码,发现了端倪,代码如下:

override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemHolder {
    var rootView = LayoutInflater.from(context).inflate(R.layout.record_layout_beauty_panel_item, parent)
    return ItemHolder(rootView)
}

inflate函数在root不为空的情况,是默认attachToRoot的,这正是问题所在

inflate(parser, root, root != null);

于是代码改成下面的样子,搞定!

    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemHolder {
        var rootView = LayoutInflater.from(context).inflate(R.layout.record_layout_beauty_panel_item, parent, false)
        return ItemHolder(rootView)
    }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值