我最近发现 onActivityResult
已被弃用。我们应该怎么处理呢?
为此引入了任何替代方案?
原文由 Amir Hossein Ghasemi 发布,翻译遵循 CC BY-SA 4.0 许可协议
我最近发现 onActivityResult
已被弃用。我们应该怎么处理呢?
为此引入了任何替代方案?
原文由 Amir Hossein Ghasemi 发布,翻译遵循 CC BY-SA 4.0 许可协议
这里我解释一下新方法
private val scan =
registerForActivityResult(ActivityResultContracts.StartActivityForResult())
{ result: ActivityResult ->
if (result.resultCode == AppCompatActivity.RESULT_OK && result.data != null) {
var selected_hub = result!!.data!!.getParcelableExtra<ExtendedBluetoothDevice>(Utils.EXTRA_DEVICE)
Log.d(TAG,"RECONNECT PROCESS "+selected_hub!!.name)
reconnect(selected_hub!!)
}
}
从活动或片段中调用它
private fun callScan() {
val intent = Intent(requireActivity(), ScanningMeshDevices::class.java)
scan.launch(intent)
}
原文由 Anshul Nema 发布,翻译遵循 CC BY-SA 4.0 许可协议
2 回答1.3k 阅读✓ 已解决
2 回答2.6k 阅读
2 回答1.7k 阅读
1 回答2.1k 阅读
1 回答1.1k 阅读
1 回答1.3k 阅读
1.3k 阅读
developer.android.com 上提供了基本培训。
以下是如何将现有代码转换为新代码的示例:
老办法:
新方式(Java):
新方式(Kotlin):
编辑。 更好的方法是使其更通用,以便我们可以重用它。下面的代码片段在我的一个项目中使用,但请注意它没有经过充分测试,可能无法涵盖所有情况。
BetterActivityResult.java
使用上述方法,您仍然需要在启动活动或片段附件之前或期间进行注册。一旦定义,它可以在活动或片段中重用。例如,如果你需要在大部分activity中开始新的activity,你可以定义一个
BaseActivity
并注册一个新的BetterActivityResult
这样:BaseActivity.java
之后,您可以简单地从任何子活动中启动一个活动,如下所示:
由于您可以将回调函数与
Intent
一起设置,因此您可以将其重用于任何活动。同样,您也可以使用其他两个构造函数来使用其他活动合约。