Spinner的onItemSelected方法触发NullPointerException(Fragment切换返回时)
Spinner切换Fragment返回时触发NullPointerException的解决方法
问题原因
Android系统的AdapterView.OnItemSelectedListener接口中,onItemSelected方法的view参数本身允许为null(比如Fragment切换返回、Spinner状态恢复的场景下,系统可能传入null)。但在Kotlin中重写该方法时,默认将view视为非空参数,当系统传入null时就会触发NullPointerException,和你遇到的错误日志完全匹配。
直接解决方案
将onItemSelected方法中的view参数声明为可空类型(在View后加?),即可接受null值,避免崩溃:
spTahajjud.adapter = customAdapter spTahajjud.onItemSelectedListener = object : AdapterView.OnItemSelectedListener { override fun onItemSelected(parent: AdapterView<*>, view: View?, position: Int, id: Long) { paramsPost["tahajjud"] = position } override fun onNothingSelected(parent: AdapterView<*>) {} }
额外提示
如果后续需要使用view参数,记得做null安全处理,比如用let语法:
override fun onItemSelected(parent: AdapterView<*>, view: View?, position: Int, id: Long) { paramsPost["tahajjud"] = position view?.let { // 在这里安全处理view相关逻辑,比如修改文本、设置样式等 } }
内容的提问来源于stack exchange,提问作者FOG
相关产品推荐
相关产品推荐

