使用 Intent
啟動(dòng)Activity
苞慢、啟動(dòng)Service
以及發(fā)送廣播等場(chǎng)景
顯式 Intent
val intent = Intent(this, SecondActivity::class.java)
startActivity(intent)
隱式 Intent
Intent
指定 action
和category
由系統(tǒng)去分析找出合適的Activity
去啟動(dòng)
只有<action>和<category>中的內(nèi)容同時(shí)匹配Intent 中指定的action和category時(shí)监徘,這個(gè)Activity 才能響應(yīng)該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()
方法來啟動(dòng)SecondActivity
世舰,startActivityForResult()
方法接收兩個(gè)參數(shù):第一個(gè)參數(shù)還是Intent 糜值;第二個(gè)參數(shù)是請(qǐng)求碼嵌洼,用于在之后的回調(diào)中判斷數(shù)據(jù)的來源妻柒。
val intent = Intent(this, SecondActivity::class.java)
startActivityForResult(intent, 1)
2.在SecondActivity
構(gòu)建了一個(gè)Intent
用于傳遞數(shù)據(jù)惫霸。把要傳遞的數(shù)據(jù)存放在Intent
中猫缭,然后調(diào)用了setResult()
方法。這個(gè)方法專門用于向上一個(gè)Activity
返回?cái)?shù)據(jù)壹店。setResult()
方法接收兩個(gè)參數(shù):第一個(gè)參數(shù)用于向上一個(gè)Activity
返回處理結(jié)果猜丹,一般只使用RESULT_OK
或RESULT_CANCELED
這兩個(gè)值;第二個(gè)參數(shù)則把帶有數(shù)據(jù)的Intent 傳遞回去硅卢。最后調(diào)用了finish()
方法來銷毀當(dāng)前Activity
射窒。
val intent = Intent()
intent.putExtra("data_return", "Hello FirstActivity")
setResult(RESULT_OK, intent)
finish()
- 在
FirstActivity
中重寫onActivityResult()
來得到返回的數(shù)據(jù)
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")
}
}
}