Kotlin Spinner的OnItemSelected中调用Intent报错无法识别函数类型如何解决
问题原因
- 报错核心为
Intent构造方法参数类型不匹配:Intent第一个参数要求传入Context上下文实例,你代码中写的this指向的是当前AdapterView.OnItemSelectedListener匿名内部类对象,不属于Context类型,编译器无法匹配到正确的Intent构造方法因此报错。
解决方案
根据代码存放位置选择对应修改方式:
- 代码写在Activity中:将
this替换为this@你的Activity类名即可,示例:
// 假设当前代码在MainActivity中 val intent = Intent(this@MainActivity, Settings::class.java) startActivity(intent)
- 代码写在Fragment中:将
this替换为requireContext()即可:
val intent = Intent(requireContext(), Settings::class.java) startActivity(intent)
额外优化:Kotlin中集合/数组取元素可以直接用下标语法
options[p2]替代options.get(p2),写法更简洁。
修正后完整代码示例(以MainActivity场景为例)
option.onItemSelectedListener = object: AdapterView.OnItemSelectedListener { override fun onItemSelected(p0: AdapterView<*>?, p1: View?, p2: Int, p3: Long) { result.text = options[p2] if (options[p2] == "3 Rounds") { val intent = Intent(this@MainActivity, Settings::class.java) startActivity(intent) } } override fun onNothingSelected(p0: AdapterView<*>?) { result.text = "Please Select" } }
内容的提问来源于stack exchange,提问作者Da Ro
相关产品推荐
相关产品推荐

