漏写一个?导致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)
}