问题描述
我正在从 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的主要目的是摆脱凌乱的请求代码
那么如何使用自定义合同开始活动?
解决方法
问题是我忘记添加依赖
implementation 'androidx.fragment:fragment-ktx:1.3.2'