Parameter specified as non-null is null一个?引发的惨案

漏写一个?导致app无限重启

有需求需要用到seekbar,因此自然需要加入seekbar 的OnSeekBarChangeListener,因为之前的项目使用了databinding,自然而然的顺手就在viewmodel内加了个变量var seekBarChangeListener: SeekBar.OnSeekBarChangeListener?=null然后,同样的在viewdatabinding内自定义了一个添加listener的bindingadapter如下

@BindingAdapter("onSeekBarChanged")
fun setSeekBarChanged(seekBar: SeekBar, onSeekBarChangeListener: SeekBar.OnSeekBarChangeListener){
    seekBar.setOnSeekBarChangeListener(onSeekBarChangeListener)
}

非常自然的在mainactivity里实现listener

 mainViewModel.seekBarChangeListener=object:SeekBar.OnSeekBarChangeListener{
            override fun onProgressChanged(seekBar: SeekBar?, progress: Int, fromUser: Boolean) {
                mainViewModel.textContent.set(progress.toString())
            }

            override fun onStartTrackingTouch(seekBar: SeekBar?) {
            }

            override fun onStopTrackingTouch(seekBar: SeekBar?) {
            }

        }

写完一跑,就开始了无限重启的情况,打断点debug显示初始化是正常的,查看log提示非空参数设为空了,我就很纳闷,明明都加了问号都是可为空的怎么会说我参数非空,最后找到logcat提示问题可能在viewdatabinding中,但是没有具体位子,因为定位实在import部分内,幸好代码不多,看了下新建的bindingadapter,终于发现adapter方法内的listener没有加非空关键字,加上后就正常了

@BindingAdapter("onSeekBarChanged")
fun setSeekBarChanged(seekBar: SeekBar, onSeekBarChangeListener: SeekBar.OnSeekBarChangeListener?){
    seekBar.setOnSeekBarChangeListener(onSeekBarChangeListener)
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值