通常启动一个activity:
val intent = Intent(MainActivity@this, javaClass<DetailActivity>())
intent.putExtra(DetailActivity.ID, it.id)
intent.putExtra(DetailActivity.CITY_NAME, result.city)
startActivity(intent)
Anko提供了简单得多的方式通过reified function
来启动一个activity:
startActivity<DetailActivity>(DetailActivity.ID to it.id,
DetailActivity.CITY_NAME to result.city)
在Kotlin中,一个内联(inline
)函数可以被具体化(reified
),这意味着我们可以在函数中得到并使用范型类型的Class。
我们也可以像Anko一样封装跳转:
inline fun <reified T : Activity> Context.startActivity(data: Bundle? = null) {
val intent = Intent(this, T::class.java)
if (data != null) {
intent.putExtras(data)
}
this.startActivity(intent)
}
Reified 泛型方法是指,在 Kotlin 中使用特殊类型参数的方法参数在编译时,会被替换为限制于activity的子类,使Java 代码可以调用带有类型约束的 Kotlin 方法。