跳转传值

2023-07-11  本文已影响0人  jancywen

使用 Intent启动Activity 、启动Service 以及发送广播等场景

显式 Intent

  val intent = Intent(this, SecondActivity::class.java) 
  startActivity(intent)

隐式 Intent

Intent指定 actioncategory由系统去分析找出合适的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()方法来启动SecondActivitystartActivityForResult()方法接收两个参数:第一个参数还是Intent ;第二个参数是请求码,用于在之后的回调中判断数据的来源。

val intent = Intent(this, SecondActivity::class.java) 
startActivityForResult(intent, 1)

2.在SecondActivity 构建了一个Intent 用于传递数据。把要传递的数据存放在Intent中,然后调用了setResult()方法。这个方法专门用于向上一个Activity返回数据。setResult()方法接收两个参数:第一个参数用于向上一个Activity 返回处理结果,一般只使用RESULT_OKRESULT_CANCELED这两个值;第二个参数则把带有数据的Intent 传递回去。最后调用了finish()方法来销毁当前Activity

val intent = Intent() 
intent.putExtra("data_return", "Hello FirstActivity") 
setResult(RESULT_OK, intent) 
finish()
  1. 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") 
  } 
 } 
}
上一篇下一篇

猜你喜欢

热点阅读