Kotlin为多个TextView设置同一点击监听器报错求助
问题解决:多个TextView设置统一点击监听器的
it错误 错误原因
你代码里的问题是作用域冲突:forEach的lambda里的it指代当前遍历的TextView,但setOnClickListener的lambda里也有一个默认的it——这个it是点击事件触发的View对象,内层的it会覆盖外层的it,导致传入txtV_Fill的变量逻辑混淆,甚至可能因类型不匹配报错。
解决方案
方案1:给外层变量明确命名(推荐)
把forEach里的it换成自定义变量名,彻底避免作用域冲突,可读性拉满:
txtVs_Ans.forEach { textView -> textView.setOnClickListener { txtV_Fill(textView, "You clicked here") } }
方案2:强转内层it(仅作参考,不推荐)
如果坚持用it,可以把内层的it强转为TextView,但这种写法不够直观:
txtVs_Ans.forEach { it.setOnClickListener { txtV_Fill(it as TextView, "You clicked here") } }
额外优化建议
Android开发中可以用**视图绑定(View Binding)**替代findViewById,省去类型转换,还能避免空安全问题,示例:
// 启用视图绑定后,通过绑定类直接获取控件 val binding = ActivityMainBinding.inflate(layoutInflater) setContentView(binding.root) val txtVs_Ans = listOf( binding.txtVAnswer1, binding.txtVAnswer2, binding.txtVAnswer3, binding.txtVAnswer4 ) txtVs_Ans.forEach { textView -> textView.setOnClickListener { txtV_Fill(textView, "You clicked here") } }
内容的提问来源于stack exchange,提问作者genespos
相关产品推荐
相关产品推荐

