如何解决在 ActivityResultContract 中获取请求代码的默认方式
是否有任何默认方式可以在 ActivityResultContract
中获取请求代码?
我知道返回 StartActivityForResult
的 ActivityResult
合约,但没有 requestCode
,只有 resultCode
。
我可以这样做,但也许有更好的解决方案:
class StartActivityForResult : ActivityResultContract<ActivityInput,ActivityOutput?>() {
override fun createIntent(
context: Context,input: ActivityInput
): Intent {
return input.data.apply { putExtra(requestCodeKey,input.requestCode) }
}
override fun parseResult(resultCode: Int,intent: Intent?): ActivityOutput? {
return if (intent == null || resultCode != Activity.RESULT_OK) null
else ActivityOutput(
// should never return default value
requestCode = intent.getIntExtra(requestCodeKey,-1),resultCode = resultCode,data = intent
)
}
override fun getSynchronousResult(
context: Context,input: ActivityInput?
): SynchronousResult<ActivityOutput?>? {
return if (input == null) SynchronousResult(null) else null
}
companion object {
const val requestCodeKey = "requestCodeKey";
}
}
data class ActivityInput(val requestCode: Int,val data: Intent)
data class ActivityOutput(val requestCode: Int,val resultCode: Int,val data: Intent
)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。