|
1、向目標(biāo)Activity傳遞數(shù)據(jù): 1 Intent intent=new Intent(this,Main2Activity.class); 2 //可傳遞多種類型的數(shù)據(jù) 3 intent.putExtra("name","張三"); 4 intent.putExtra("age",12); 5 startActivity(intent);
2、在目標(biāo)Activity中取出數(shù)據(jù) 1 Intent intent=getIntent(); 2 //用getXxxExtra()取出對(duì)應(yīng)類型的數(shù)據(jù)。取出String只需要指定key 3 String name=intent.getStringExtra("name"); 4 //取出int要指定key,還要設(shè)置默認(rèn)值,當(dāng)intent中沒(méi)有該key對(duì)應(yīng)的value時(shí),返回設(shè)置的默認(rèn)值 5 int age=intent.getIntExtra("age",0);
目標(biāo)Activity銷毀時(shí),可以回傳數(shù)據(jù)給上一個(gè)Activity: 1、啟動(dòng)目標(biāo)Activity,并設(shè)置一個(gè)請(qǐng)求碼標(biāo)識(shí)當(dāng)前Activity 1 Intent intent=new Intent(this,Main2Activity.class); 2 //startActivityForResult()方法可以啟動(dòng)一個(gè)Activity,并可以設(shè)置一個(gè)int型的請(qǐng)求碼標(biāo)識(shí)當(dāng)前Activity 3 startActivityForResult(intent,1);
2、在目標(biāo)Activity中回傳數(shù)據(jù) 1 //回傳數(shù)據(jù)用得Intent可以新建,也可以用getIntent() 2 Intent intent=new Intent(); 3 //設(shè)置要回傳的數(shù)據(jù) 4 intent.putExtra("name","張三"); 5 intent.putExtra("age",18); 6 //設(shè)置結(jié)果碼標(biāo)識(shí)當(dāng)前Activity,回傳數(shù)據(jù)。不管多早調(diào)用這句代碼,這句代碼在當(dāng)前Activity銷毀時(shí)才會(huì)執(zhí)行,即此Activity銷毀時(shí)才會(huì)回傳數(shù)據(jù)。請(qǐng)求碼和結(jié)果碼不必相同。 7 setResult(1,intent); 回傳時(shí)會(huì)把請(qǐng)求碼、結(jié)果碼、Intent數(shù)據(jù)封裝為一個(gè)整體回傳,請(qǐng)求碼+結(jié)果碼唯一標(biāo)識(shí)回傳的Intent
3、在上一級(jí)Activity中取出回傳的數(shù)據(jù) 上一級(jí)Activity使用 startActivityForResult() 開(kāi)啟目標(biāo)Activity后,當(dāng)目標(biāo)Activity銷毀時(shí),會(huì)向上一級(jí)Activity回傳數(shù)據(jù),并回調(diào)上一級(jí) Activity的 onActivityResult() 方法。 我們需要重寫(xiě)上一級(jí)Activity的 onActivityResult() 方法獲取回傳數(shù)據(jù)。 1 //重寫(xiě)上一級(jí)Activity的onActivityResult()方法來(lái)獲取目標(biāo)Activity回傳的數(shù)據(jù) 2 //三個(gè)形參,請(qǐng)求碼、結(jié)果碼、目標(biāo)Activity回傳的Intent 3 @Override 4 protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) { 5 //調(diào)用基類的方法,此句代碼會(huì)自動(dòng)生成 6 super.onActivityResult(requestCode, resultCode, data); 7 if(requestCode==1){ //如果請(qǐng)求碼是當(dāng)前Activity的 8 if(resultCode==1){ //如果結(jié)果碼是某個(gè)目標(biāo)Activity的,就取出對(duì)應(yīng)的數(shù)據(jù)。這個(gè)判斷主要是可能有多個(gè)目標(biāo)Activity向當(dāng)前Activity回傳數(shù)據(jù),這些Intent數(shù)據(jù)中可能具有相同的key 9 String name=data.getStringExtra("name"); 10 int age=data.getIntExtra("age",0); 11 } 12 } 13 }
如過(guò)上一級(jí)Activity開(kāi)啟了多個(gè)目標(biāo)Activity,回傳數(shù)據(jù)時(shí)都是回調(diào)onActivityResult()方法,所以常常要根據(jù)結(jié)果碼區(qū)分是哪個(gè)目標(biāo)Activity回傳的數(shù)據(jù)。如果只開(kāi)啟了一個(gè)目標(biāo)Activity,則不必判斷。
數(shù)據(jù)回傳很常用,比如發(fā)微信朋友圈時(shí),進(jìn)入相冊(cè)選擇好圖片后,會(huì)回傳選擇的圖片的信息。
|
|
|