Kotlin中Intent使用报错求助:Lambda内this指向异常
问题根源
在setOnClickListener的lambda表达式中,this指向的是OnClickListener的匿名实现类实例,而非你的Activity实例。而创建Intent时第一个参数需要的是关联当前页面的Activity Context,这就是报错的核心原因。
解决方案
推荐以下几种可靠的修正方式:
1. 明确指定Activity的this
如果你的Activity类名为MainActivity(请根据实际类名修改),用MainActivity@this来明确引用Activity实例:
btnsignup.setOnClickListener{ val intent = Intent( MainActivity@this, signup::class.java ) startActivity(intent) } btnlogin.setOnClickListener{ val intent = Intent( MainActivity@this, login::class.java ) startActivity(intent) }
2. 使用View的Context
每个View都持有它所在Activity的Context引用,直接用view.context更通用(尤其适用于在自定义View或Fragment中复用代码的场景):
btnsignup.setOnClickListener{ view -> val intent = Intent( view.context, signup::class.java ) startActivity(intent) } btnlogin.setOnClickListener{ view -> val intent = Intent( view.context, login::class.java ) startActivity(intent) }
3. 若在Fragment中,使用Fragment的Context
如果这段代码是写在Fragment里,改用requireContext()(确保Fragment已关联Activity)或activity(需判空):
btnsignup.setOnClickListener{ val intent = Intent( requireContext(), signup::class.java ) startActivity(intent) }
关于
applicationContext的说明 用applicationContext启动Activity会要求添加FLAG_ACTIVITY_NEW_TASK标记,否则会抛出android.util.AndroidRuntimeException——因为应用上下文不属于任何Activity栈。除非你有特殊需求,否则不推荐用这种方式启动页面。
内容的提问来源于stack exchange,提问作者user21558640
相关产品推荐
相关产品推荐

