Sak*_*ana 4 android kotlin kotlin-android-extensions
我正在尝试为上下文编写一个kotlin扩展函数,它将使用给定的类名和意图附加列表在android中启动新的活动。我能够成功地开始活动而没有任何额外的东西,但是我面临着他们的问题。
fun <T> Context.openActivity(it: Class<T>, pairs: List<Pair<String, Any>>) {
var intent = Intent()
pairs.forEach {
intent.putExtra(it.first, it.second)
}
startActivity(intent)
}
Run Code Online (Sandbox Code Playgroud)
这里的主要问题是-> intent.putExtra()不会将第二个参数设为Any
Wil*_*ran 14
宣布:
inline fun <reified T : Activity> Context.startActivity(block: Intent.() -> Unit = {}) {
startActivity(Intent(this, T::class.java).apply(block))
}
Run Code Online (Sandbox Code Playgroud)
简单使用:
startActivity<MainActivity>()
Run Code Online (Sandbox Code Playgroud)
有额外的
startActivity<MainActivity>{
putExtra("param 1", "Simple")
}
Run Code Online (Sandbox Code Playgroud)
与其使用成对的列表,不如考虑使用Bundle。然后,您可以使用添加它putExtras(Bundle)。
如果您想前进一步,可以添加一个lambda扩展来配置其他功能:
fun <T> Context.openActivity(it: Class<T>, extras: Bundle.() -> Unit = {}) {
var intent = Intent(this, it)
intent.putExtras(Bundle().apply(extras))
startActivity(intent)
}
Run Code Online (Sandbox Code Playgroud)
然后,您可以将其称为:
openActivity(MyActivity::class.java) {
putString("string.key", "string.value")
putInt("string.key", 43)
...
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1553 次 |
| 最近记录: |