Kotlin中如何将Activity传递给函数?跳转工具函数参数定义疑问
Kotlin中封装Activity跳转函数的正确参数定义
你不需要传递Activity的实例,而是要传递目标Activity的Class类型——因为Intent跳转只需要获取目标类的Class对象,手动创建Activity实例(比如MenuActivity())是错误的,Activity实例必须由Android系统管理,手动实例化会破坏组件生命周期,引发异常。
方式一:直接传递Class对象
这是最直观的写法,函数参数定义为Class<out Activity>,可以接收任意Activity子类的Class对象:
override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) // 调用时传入目标Activity的Class对象 replaceActivity(MenuActivity::class.java) } // 正确的函数参数定义 private fun replaceActivity(targetActivity: Class<out Activity>) { val intent = Intent(this, targetActivity) startActivity(intent) }
方式二:使用Kotlin具体化泛型(更简洁)
借助Kotlin的内联函数和具体化泛型,可以让调用代码更简洁,无需手动写::class.java:
override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) // 调用时直接指定泛型类型 replaceActivity<MenuActivity>() } // 内联函数+具体化泛型 private inline fun <reified T : Activity> replaceActivity() { val intent = Intent(this, T::class.java) startActivity(intent) }
内容的提问来源于stack exchange,提问作者Dua
相关产品推荐
相关产品推荐

