我希望在Kotlin开设一项活动结果。
我看过艺术Can't Call StartActivityForResult in Anko
所以我将AppCompatActivity转换为Activity
但是代码(mContext as Activity).startActivityForResult<UIAddEditBackup>(requestCode = 1, "id" to 2L)
还没有运行,为什么?
我的代码
class UIMain : AppCompatActivity() {
private lateinit var mContext: Context
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.layout_main)
mContext = this
btnExit.setOnClickListener {
startActivity<UIAddEditBackup>("id" to 2L) //OK
(mContext as Activity).startActivityForResult<UIAddEditBackup>(requestCode = 1, "id" to 2L) //Error
}
}
}
答案 0 :(得分:4)
根据Kotlin Offical Doc on named arguments,
当使用位置参数和命名参数调用函数时,所有位置参数应放在第一个命名参数之前。例如,允许调用
f(1, y = 2)
,但f(x = 1, 2)
不是。
您正在使用startActivityForResult<UIAddEditBackup>(requestCode = 1, "id" to 2L)
。情况就是这样。
所以,修理如下:
startActivityForResult<UIAddEditBackup>(1, "id" to 2L)
或
startActivityForResult<UIAddEditBackup>(requestCode = 1, params = *arrayOf("id" to 2L))
(Anko startActivityForResult的原型是inline fun <reified T: Activity> Activity.startActivityForResult(requestCode: Int, vararg params: Pair<String, Any?>)
)。
在这种情况下,可以使用扩展运算符在命名表单中传递可变数量的参数(vararg):
fun foo(vararg strings: String) { /* ... */ }
foo(strings = *arrayOf("a", "b", "c"))
(mContext as Activity).
不是必需的。