使用 Intent
启动Activity
、启动Service
以及发送广播等场景
显式 Intent
val intent = Intent(this, SecondActivity::class.java)
startActivity(intent)
隐式 Intent
Intent
指定 action
和category
由系统去分析找出合适的Activity
去启动
只有<action>和<category>中的内容同时匹配Intent 中指定的action和category时,这个Activity 才能响应该Intent 。
val intent = Intent("com.example.activitytest.ACTION_START")
intent.addCategory("com.example.activitytest.MY_CATEGORY")
startActivity(intent)
传值
传值:intent.putExtra("extra_data", data)
取值:val extraData = intent.getStringExtra("extra_data")
反向传值
1.用startActivityForResult()
方法来启动SecondActivity
,startActivityForResult()
方法接收两个参数:第一个参数还是Intent ;第二个参数是请求码,用于在之后的回调中判断数据的来源。
val intent = Intent(this, SecondActivity::class.java)
startActivityForResult(intent, 1)
2.在SecondActivity
构建了一个Intent
用于传递数据。把要传递的数据存放在Intent
中,然后调用了setResult()
方法。这个方法专门用于向上一个Activity
返回数据。setResult()
方法接收两个参数:第一个参数用于向上一个Activity
返回处理结果,一般只使用RESULT_OK
或RESULT_CANCELED
这两个值;第二个参数则把带有数据的Intent 传递回去。最后调用了finish()
方法来销毁当前Activity
。
val intent = Intent()
intent.putExtra("data_return", "Hello FirstActivity")
setResult(RESULT_OK, intent)
finish()
- 在
FirstActivity
中重写onActivityResult()
来得到返回的数据
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")
}
}
}
网友评论