Android入门之在Activity之间穿梭的Intent
目录
- 概述
- 1. 显式 Intent
- 2. 隐式 Intent
- 使用 Intent 传递数据
- 1. 向下一个 Activity 传递数据
- 2. 返回数据给上一个 Activity
概述 Intent 是 Android 程序中各组件之间进行交互的一种重要方式,它不仅可以指明当前组件想要执行的动作,还可以在不同组件之间传递数据
【Android入门之在Activity之间穿梭的Intent】Intent 大致可分为两种:显式 Intent 和隐式 Intent
1. 显式 Intent
Intent 有多个构造函数的重载,其中一个是
Intent(Context packetContext, Class> cls)
,这个构造函数接收两个参数:- 第一个参数 Context 要求提供一个启动 Activity 的上下文
- 第二个参数 Class 用于指定想要启动的目标 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 可以响应
com.example.activitytest.ACTION_START
这个 action,而 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 = https://www.it610.com/article/Uri.parse("https://www.baidu.com") startActivity(intent)}
使用 Intent 传递数据
1. 向下一个 Activity 传递数据
在启动 Activity 时传递数据的思路很简单,Intent 提供了一系列 putExtra() 方法的重载,可以把数据暂存在 Intent 中,在启动另一个 Activity 时,再把数据从 Intent 中取出即可
button1.setOnClickListener {val data = "https://www.it610.com/article/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 = https://www.it610.com/article/intent.getStringExtra("extra_data")Log.d("SecondActivity", "extra data is $extraData")}
2. 返回数据给上一个 Activity
Activity 类中有一个启动 Activity 的 startActivityForResult() 方法,可以在 Activity 销毁时返回结果给上一个 Activity,该方法接收两个参数:
- 第一个参数还是 Intent
- 第二个参数是请求码,用于在之后的回调中判断数据的来源
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 传递回去
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {super.onActivityResult(requestCode, resultCode, data)when (requestCode) {1 -> if (resultCode == RESULT_OK) {val returnedData = https://www.it610.com/article/data?.getStringExtra("data_return")Log.d("FirstActivity", "returned data is $returnedData")}}}
onActivityResult() 方法带有三个参数:
- 第一个参数 requestCode,即我们启动 Activity 时传入的请求码
- 第二个参数 resultCode,即我们在返回数据时传入的处理结果
- 第三个参数 data,即携带返回数据的 Intent
到此这篇关于Android入门之在Activity之间穿梭的Intent 的文章就介绍到这了,更多相关Android Intent内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
推荐阅读
- android第三方框架(五)ButterKnife
- Android中的AES加密-下
- 带有Hilt的Android上的依赖注入
- android|android studio中ndk的使用
- Android事件传递源码分析
- RxJava|RxJava 在Android项目中的使用(一)
- Android7.0|Android7.0 第三方应用无法访问私有库
- 深入理解|深入理解 Android 9.0 Crash 机制(二)
- android防止连续点击的简单实现(kotlin)
- Android|Android install 多个设备时指定设备