千家信息网

如何理解在Activity之间穿梭的Intent

发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,这篇文章主要介绍"如何理解在Activity之间穿梭的Intent",在日常操作中,相信很多人在如何理解在Activity之间穿梭的Intent问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作
千家信息网最后更新 2026年11月03日如何理解在Activity之间穿梭的Intent

这篇文章主要介绍"如何理解在Activity之间穿梭的Intent",在日常操作中,相信很多人在如何理解在Activity之间穿梭的Intent问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"如何理解在Activity之间穿梭的Intent"的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

目录
  • 概述

    • 1. 显式 Intent

    • 2. 隐式 Intent

  • 使用 Intent 传递数据

    • 1. 向下一个 Activity 传递数据

    • 2. 返回数据给上一个 Activity

概述

Intent 是 Android 程序中各组件之间进行交互的一种重要方式,它不仅可以指明当前组件想要执行的动作,还可以在不同组件之间传递数据

Intent 大致可分为两种:显式 Intent 和隐式 Intent

1. 显式 Intent

Intent 有多个构造函数的重载,其中一个是 Intent(Context packetContext, Class cls),这个构造函数接收两个参数:

  • 第一个参数 Context 要求提供一个启动 Activity 的上下文

  • 第二个参数 Class 用于指定想要启动的目标 Activity

通过这个构造函数可以构建出 Intent,Activity 类中提供了一个 startActivity() 方法,专门启动 Activity,它接收一个 Intent 参数。我们定义一个按钮 button1,修改点击事件

button1.setOnClickListener {    val intent = Intent(this, SecondActivity::class.java)    startActivityForResult(intent)}

使用这种方式启动 Activity,Intent 的意图十分明显,因此称之为显式 Intent

2. 隐式 Intent

隐式 Intent 并不明确指出想要启动哪一个 Activity,而是指定了一系列更为抽象的 action 和 category 等信息,然后交由系统去分析这个 Intent,并帮助我们找出适合的 Activity 去启动

通过在 标签配置 的内容,可以指定当前 Activity 能够响应的 action 和 category,打开 AndroidManifest.xml,添加如下代码:

                                                        

我们指明了当前 Activity 可以响应 com.example.activitytest.ACTION_START 这个 action,而 标签则包含了一些附加信息。只有 和 中的内容同时匹配 Intent 中指定的 action 和 category 时,这个 Activity 才能响应该 Intent

button1.setOnClickListener {    val intent = Intent("com.example.activitytest.ACTION_START")    intent.addCategory("com.example.activityest.MY_CATEGORY")    startActivity(intent)}

使用隐式 Intent 不仅可以启动自己程序内的 Activity,还可以启动其他程序的 Activity,这使得多个应用程序之间的功能共享成为可能。比如你的应用程序需要展示一个网页,只需要调用系统的浏览器来打开这个网页即可

button1.setOnClickListener {        val intent = Intent(Intent.ACTION_VIEW)        intent.data = Uri.parse("https://www.baidu.com")        startActivity(intent)}

使用 Intent 传递数据

1. 向下一个 Activity 传递数据

在启动 Activity 时传递数据的思路很简单,Intent 提供了一系列 putExtra() 方法的重载,可以把数据暂存在 Intent 中,在启动另一个 Activity 时,再把数据从 Intent 中取出即可

button1.setOnClickListener {    val data = "Hello SecondActivity"    val intent = Intent(this, SecondActivity::class.java)    intent.putExtra("extra_data", data)    startActivity(intent)}

然后在 SecondActivity 中将传递的数据取出

override fun onCreate(savedInstanceState: Bundle?) {    super.onCreate(savedInstanceState)    setContentView(R.layout.sceond_layout)    val extraData = intent.getStringExtra("extra_data")    Log.d("SecondActivity", "extra data is $extraData")}

2. 返回数据给上一个 Activity

Activity 类中有一个启动 Activity 的 startActivityForResult() 方法,可以在 Activity 销毁时返回结果给上一个 Activity,该方法接收两个参数:

  • 第一个参数还是 Intent

  • 第二个参数是请求码,用于在之后的回调中判断数据的来源

修改 FirstActivity 中按钮的点击事件代码如下,这里使用了 startActivityForResult() 方法来启动 SecondActivity,请求码只要是个唯一值,这里传入 1

button1.setOnClickListener {    val intent = Intent(this, SecondActivity::class.java)    startActivityForResult(intent, 1)}

接下来在 SecondActivity 中给按钮注册点击事件,并在点击事件中添加返回数据的逻辑

class SecondActivity : BaseActivity() {    override fun onCreate(savedInstanceState: Bundle?) {        super.onCreate(savedInstanceState)        setContentView(R.layout.sceond_layout)        button2.setOnClickListener {            val intent = Intent()            intent.putExtra("data_return", "Hello FirstActivity")            setResult(RESULT_OK, intent)            finish()        }    }}

这里还是构建了一个 Intent,只不过这个 Intent 仅仅用来传递数据,然后调用了 setResult() 方法,该方法专门向上一个 Activity 返回数据

setResult() 方法接收两个参数:

  • 第一个参数用于向上一个 Activity 返回处理结果,一般只使用 RESULT_OK 或 RESULT_CANCELED 这两个值

  • 第二个参数则把带有数据的 Intent 传递回去

由于我们使用 startActivityForResult() 方法来启动 SecondActivity,SecondActivity 销毁后会回调上一个 Activity 的 onActivityResult() 方法,因此需要在 FirstActivity 中重写该方法来得到返回数据

override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {    super.onActivityResult(requestCode, resultCode, data)    when (requestCode) {        1 -> if (resultCode == RESULT_OK) {            val returnedData = data?.getStringExtra("data_return")            Log.d("FirstActivity", "returned data is $returnedData")        }    }}

onActivityResult() 方法带有三个参数:

  • 第一个参数 requestCode,即我们启动 Activity 时传入的请求码

  • 第二个参数 resultCode,即我们在返回数据时传入的处理结果

  • 第三个参数 data,即携带返回数据的 Intent

由于在一个 Activity 中有可能调用 startActivityForResult() 来启动很多不同的 Activity,而每一个 Activity 返回的数据都会回调到 onActivityResult() 方法,因此我们首先要做的是通过检查 requestCode 的值判断数据来源,再通过 resultCode 的值来判断处理结果是否成功,最后从 data 中取值并打印

到此,关于"如何理解在Activity之间穿梭的Intent"的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注网站,小编会继续努力为大家带来更多实用的文章!

数据 参数 方法 之间 程序 两个 事件 结果 学习 函数 按钮 组件 处理 帮助 不同 接下来 三个 代码 信息 内容 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 小米移动互联网科技园 互联网科技保险 与互联网科技公司 高科技与互联网 国外互联网科技网站 盛创互联网科技有限公司 新华互联网科技校企合作 衡水科技产业互联网平台 深圳互联网科技怎么样 华夏互联网科技业 和信科技工业互联网 米聚互联网科技南京有限公司排面 广西互联网科技孵化中心 天津腾达互联网科技有限公司 中国互联网公司排名锤子科技 互联网科技公司营业执照怎么办理 互联网安防科技感 互联网金融运营模式中的金融科技 数字科技和互联网金融哪个好 互联网科技创业计划的风险分析 高科技互联网 金融科技创新监管互联网金融 华中科技大学互联网 上海喔噻互联网科技 玖二柒互联网科技公司待遇 保险科技服务互联网营销体系 深圳互联网科技的发展 广州百诚互联网科技有限公司官网 好易买互联网科技 数字科技和互联网金融哪个好
0