【发布时间】:2021-06-27 15:17:34
【问题描述】:
我正在从 startActivityForResult 迁移到 Activity Result API。我有自定义合同和启动器:
private val gameContract=object: ActivityResultContract<Int, GameActivity.GameResult?>() {
override fun createIntent(context: Context, input: Int?): Intent {
return Intent(this@SelectorActivity, GameActivity::class.java)
}
override fun parseResult(resultCode: Int, intent: Intent?): GameActivity.GameResult? {
if (resultCode == Activity.RESULT_OK) {
val data = intent?.getStringExtra("data")
data?.let {
return Gson().fromJson(it, GameActivity.GameResult::class.java)
}
return null
}
return null
}
}
private val gameLauncher=registerForActivityResult(gameContract){
//
}
当我使用 gameLauncher.launch(0) 开始活动时,我遇到了异常
java.lang.IllegalArgumentException: 只能使用低 16 位 请求代码
我尝试了不同的输入,但结果相同
显然它希望设置 requestCode 。但是API没有办法设置它。
我认为这个 API 的主要目的是摆脱混乱的请求代码
那么如何使用自定义合同开始活动?
【问题讨论】:
标签: android kotlin registerforactivityresult