如何在活动或片段之外使用 StartActivityResult()?

How to use StartActivityResult() outside activity or fragment?

提问人:Laser 提问时间:8/9/2023 最后编辑:Laser 更新时间:8/9/2023 访问量:28

问:

基本上,我有一个按意图打开相机的函数,我正在尝试将该函数添加到Extention功能文件中,但收到错误说“create function startActivityForResult”。那么谁能帮忙实现这一目标呢?

private fun imageChooser() {

    //passing intent.

    val i = Intent ()
    i.type = "image/*"
    i.action = Intent.ACTION_GET_CONTENT


   //Getting error here when i am pasting this code in a different file 
    called extention function.

    startActivityForResult (i, 0)
}
Android Kotlin 错误处理

评论

0赞 snachmsm 8/9/2023
首先 - 以“可复制”的方式发布您的代码,没有人会从图片中重写您的行。第二 - 发布所有相关代码,而不仅仅是单个方法,这还不够
0赞 CommonsWare 8/9/2023
“我正在尝试将该函数添加到扩展功能文件中” -- 您没有创建具有函数的类的扩展函数。除此之外,请按照说明进行操作startActivityForResult()

答:

0赞 ItzDavi 8/9/2023 #1

若要在非活动类中使用,必须使用对活动的引用。startActivityForResult()

将 Activity 作为参数传递给您正在使用的函数,并在 non-activity 类中使用它:

private fun imageChooser(activity: Activity) {
    val intent = Intent()
    activity.startActivityForResult(intent,0)
}

或活动:

this.startActivityForResult(intent, 0)

或片段:

activity?.startActivityForResult(Intent(), 0)
requireActivity().startActivityForResult(Intent(), 0)

重要

startActivityForResult()弃用

从官方文档中遵循操作

评论

0赞 CommonsWare 8/9/2023
切勿直接创建 的实例。ComponentActivity
0赞 ItzDavi 8/9/2023
为什么?你能解释更多吗?立即将其从答案中删除,谢谢!
0赞 CommonsWare 8/9/2023
切勿直接创建 的实例或任何子类。活动需要由框架实例化才能正常工作,包括启动其他活动的能力。ActivityActivity
0赞 ItzDavi 8/9/2023
从答案中删除,现在好吗?谢谢你的解释!
1赞 Laser 8/9/2023
是的,现在将活动作为参数传递已经解决了我的问题