仔细看源码,可以发现回调顺序遵循的是FILO,用双端列队保存回调监听即可:
open class BaseActivity : AppCompatActivity() {
private val resultCallBacks: Deque<ResultCallBack> = ArrayDeque()
private val activityForResult =
registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result ->
resultCallBacks.pop()?.let {
it(result.resultCode, result.data?: Intent())
}
}
@JvmOverloads
protected fun startForActivityResult(
cls: Class<*>,
block: Intent.() -> Unit = {},
callBack: ResultCallBack
) {
resultCallBacks.push(callBack)
activityForResult.launch(Intent(this, cls).apply(block))
}
}
使用:
startForActivityResult(CActivity::class.java, {
putExtra("data1", "data")
}) { resultCode, data ->
}