gpt4 book ai didi

android - 如何用 ActivityResultLauncher 替换 startActivityForResult 但仍然包含选项 Bundle?

转载 作者:行者123 更新时间:2023-12-04 23:55:03 24 4
gpt4 key购买 nike

startActivityForResult(intent: Intent!, options: Bundle?) 已弃用。我正在尝试用 ActivityResultLauncher 替换,但我需要传递 options。我怎样才能用新方法做到这一点?下面是原始(现已弃用)方法的示例,该方法将打开“联系人”菜单,然后根据 code 的值在开关中执行以下两项操作之一:

...
val code = contactType //can be either 1 or 2
val contactsIntent = Intent(Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_URI)
contactsIntent.type = ContactsContract.CommonDataKinds.Phone.CONTENT_TYPE
startActivityForResult(contactsIntent, code)

override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
if(resultCode == Activity.RESULT_OK) {
when(requestCode) {
1 -> { //Do something
}
2 -> { //Do something else
}
}
}
}

我试图将上面的转换为使用 ActivityResultLauncher 但我还没有弄清楚如何将 code 的值传递给它。以下是我目前所拥有的:

val code = contactType //can be either 1 or 2
val contactsIntent = Intent(Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_URI)
contactsIntent.type = ContactsContract.CommonDataKinds.Phone.CONTENT_TYPE
contactLauncher.launch(contactsIntent) //or maybe contactLauncher.launch(contactsIntent, code)?

private val contactLauncher: ActivityResultLauncher<Intent> = registerForActivityResult(ActivityResultContracts.StartActivityForResult()) {
if(it.resultCode == Activity.RESULT_OK) {
when(??? requestCode ???) {
1 -> { //Do something
}
2 -> { //Do something else
}
}
}
}

最佳答案

在这种情况下,您需要创建两个单独的 ActivityResultLauncher 对象,每种情况一个。

IMO,这正是 Google 试图解决的问题,具有困惑的“onActivityResult”函数,并且必须处理 requestCodes。现在,这更类似于 OnClickListener 类型的回调。

他们对 Android 的其他部分也做了同样的事情,比如请求应用权限。 requestCode 现在在内部处理。

关于android - 如何用 ActivityResultLauncher 替换 startActivityForResult 但仍然包含选项 Bundle?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64744038/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com