在每次 activity 启动和结果时执行代码
Execute code on every activity launch and result
过去我使用“startActivityForResult”和“onActivityResult”。这些方法现在已被弃用。因此,我想使用现代替代方案“registerForActivityResult”。
不幸的是,我无法找到一种方法来使用这个新模型实现旧功能。我曾经在任何 activity 启动之前以及任何 activity 完成结果时将“AppCompatActivity”的“startActivityForResult”和“onActivityResult”覆盖为 运行 特定代码。这非常方便,因为我不必为每次 activity 启动都编写代码。
正如我现在看到的那样,我注册了 activity 作为结果并传递了一个回调来获取一个启动器,我可以用它来稍后启动 activity。这部分我可以通过创建一个函数来使用始终执行特定代码的启动器来解决。但是回调有问题。如我所见,我必须将此特定代码写入我为任何 activity 启动编写的每个回调的回调中。
我是正确的还是遗漏了什么?
有几种方法可以做到这一点:
1)将公共代码放在它自己的函数中,并在每个回调中调用该函数。将需要编写的代码减少到 1 行
2)写一个回调class GenericCallback。然后编写您的特定回调 MySpecificCallback extends GenericCallback。将通用代码放在 GenericCallback class 中,您只需在特定回调中调用 super 即可。将代码缩减为仅调用 super.callbackFunction,但这意味着您不能使用 lambda - 您必须使用命名或匿名 class。尽管
这可能更像是一种 Java 方法
3) 为接受回调的 registerForActivityResult 创建一个包装函数,并调用真正的 registerForActivityResult 回调调用公共代码和您的回调示例:
fun registerWrapper(callback: ()->Unit) {
registerForActivityResult(() ->{
doCommonCode()
callback()
}
}
过去我使用“startActivityForResult”和“onActivityResult”。这些方法现在已被弃用。因此,我想使用现代替代方案“registerForActivityResult”。
不幸的是,我无法找到一种方法来使用这个新模型实现旧功能。我曾经在任何 activity 启动之前以及任何 activity 完成结果时将“AppCompatActivity”的“startActivityForResult”和“onActivityResult”覆盖为 运行 特定代码。这非常方便,因为我不必为每次 activity 启动都编写代码。
正如我现在看到的那样,我注册了 activity 作为结果并传递了一个回调来获取一个启动器,我可以用它来稍后启动 activity。这部分我可以通过创建一个函数来使用始终执行特定代码的启动器来解决。但是回调有问题。如我所见,我必须将此特定代码写入我为任何 activity 启动编写的每个回调的回调中。
我是正确的还是遗漏了什么?
有几种方法可以做到这一点:
1)将公共代码放在它自己的函数中,并在每个回调中调用该函数。将需要编写的代码减少到 1 行
2)写一个回调class GenericCallback。然后编写您的特定回调 MySpecificCallback extends GenericCallback。将通用代码放在 GenericCallback class 中,您只需在特定回调中调用 super 即可。将代码缩减为仅调用 super.callbackFunction,但这意味着您不能使用 lambda - 您必须使用命名或匿名 class。尽管
这可能更像是一种 Java 方法3) 为接受回调的 registerForActivityResult 创建一个包装函数,并调用真正的 registerForActivityResult 回调调用公共代码和您的回调示例:
fun registerWrapper(callback: ()->Unit) {
registerForActivityResult(() ->{
doCommonCode()
callback()
}
}