Q1:这个activity要销毁的时候需要注销这个callback吗?
答:没有
Q2:这个回调是生命周期感知的吗?
答:是的
Q3:什么时候使用ActivityResultContracts.StartActivityForResult()?
Ans:它将在您创建自定义合同时使用,更多信息:https ://developer.android.com/training/basics/intents/result#custom
Q4:处理一个活动的不同请求代码的最佳方法是什么?
答:
示例:针对一项活动
->从第一个活动启动第二个活动:
val intent = Intent(this, SecondActivity::class.java)
startActivityForResult(intent,101)
-> 在第一个活动中,您必须覆盖 onActivityResult():
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
when (requestCode) {
101 -> {
when (resultCode) {
Activity.RESULT_OK -> {
data!!.getStringExtra("keySecond")
}
Activity.RESULT_CANCELED -> {
//if there's no result
}
}
}
}
-> 在第二个活动中将结果发送回第一个活动,如下所示:
val intent = Intent()
intent.putExtra("keySecond","dataFromSecondActivity")
setResult(Activity.RESULT_OK,intent)
finish()
示例:针对多个活动
-> 如果您处理来自一项活动的不同请求代码:
val intent = Intent(this, ThirdActivity::class.java)
startActivityForResult(intent,210)
-> 在第三个活动中发回结果
val intent = Intent()
intent.putExtra("keyThird","dataFromThirdActivity")
setResult(Activity.RESULT_OK,intent)
finish()
->那么您在第一个活动中的 onActivityResult() 函数应该如下所示:
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
when (requestCode) {
101 -> { //result from second activity
when (resultCode) {
Activity.RESULT_OK -> {
data!!.getStringExtra("keySecond")
}
Activity.RESULT_CANCELED -> {
//if there's no result
}
}
}
210 -> { //result from third activity
when (resultCode) {
Activity.RESULT_OK -> {
data!!.getStringExtra("keyThird")
}
Activity.RESULT_CANCELED -> {
//if there's no result
}
}
}
}
}