使用Intent在活動(dòng)中傳遞數(shù)據(jù)
通過(guò)前面的學(xué)習(xí),我們了解到了使用Intent啟動(dòng)活動(dòng),撥打電話,發(fā)送短信。獲取地理位置信息,在這一節(jié)我們將繼續(xù)使用Intent在活動(dòng)之間傳遞數(shù)據(jù),Intent中提供了putExtra()方法的重載,該方法使用可以把要傳遞的數(shù)據(jù)暫時(shí)存儲(chǔ)在Intent中,當(dāng)啟動(dòng)另一個(gè)Activity時(shí),只要再?gòu)闹腥〕鰯?shù)據(jù)就可以,比如在FirstActivity中向SecongActivity中傳遞一個(gè)字符串時(shí),可以使用以下:
在FirstActivity中寫(xiě)如下代碼
String data="Hello SecondActivity";//聲明需要在兩個(gè)活動(dòng)中傳遞數(shù)據(jù)
Intent intent=new Intent();//新建一個(gè)Intent對(duì)象
intent.setClass(FirstActivity.this ,SecondActivirty.class);//設(shè)置intent的執(zhí)行動(dòng)作:?jiǎn)?dòng)SecondActivity
intent.putExtra("extra_data",data);
startActivity(intent);
在putExtra()方法中傳入兩個(gè)參數(shù),這兩個(gè)參數(shù)是Key-Value的鍵值對(duì);
在SecondActivity我們?nèi)〕鰯?shù)據(jù)的代碼如下
Intent intent=getIntent();
String data=intent.getStringExtra("extar_data");
log.d("SecondActivity".data);
在如上述的代碼中,我們首先新建Intent對(duì)象,并通過(guò)getIntent()方法獲取用于啟動(dòng)SecondActivity的Intent傳遞過(guò)來(lái)的數(shù)據(jù)data;因?yàn)槲覀?輸入是data是一個(gè)字符串,所以我們調(diào)用getsStringExtra()方法來(lái)獲取該數(shù)據(jù)的字符串,如果傳入的是Int,我們則是使用getIntExtra()方法;如果是傳入的布爾值,則使用getBooleanExtra()方法。
返回?cái)?shù)據(jù)給上一個(gè)活動(dòng)
既然能夠?qū)?shù)據(jù)傳遞給下一個(gè)活動(dòng),那么我們是否可以將數(shù)據(jù)傳遞到上一個(gè)活動(dòng)呢?答案是一定的。在Activity中還有一個(gè)方法startActivityForResult();此方法也是用來(lái)啟動(dòng)活動(dòng)的;但不同的是在這一個(gè)方法中,是在活動(dòng)銷(xiāo)毀的時(shí)候能夠返回一個(gè)結(jié)果給上一個(gè)活動(dòng)。
startActivityForResult()方法傳入其中的兩個(gè)參數(shù),第一個(gè)參數(shù)是:Intent。第二個(gè)參數(shù)是請(qǐng)求碼(用于在后面的回調(diào)方法中判斷該數(shù)據(jù)的來(lái)源。具體的實(shí)現(xiàn):
我在FirstActivity中聲明如下:
//聲明Intent的執(zhí)行動(dòng)作
Intent intent=new Intent(FirstActivity.this , SecondActivirty.calss);
//啟動(dòng)活動(dòng)方法中的請(qǐng)求碼只要是唯一值就可以 了
startActivityForResult(intent,1);
接下來(lái)在SecondActivity中實(shí)現(xiàn)返回?cái)?shù)據(jù)給上一活動(dòng)的邏輯
Intent intent=new Intent();
intent.putExtra("data_reuturn","Hello FirstActivity");
setResult(RESULT_OK,intent);
finish();
//setResult()方法中需要傳入兩個(gè)數(shù)據(jù),第一個(gè)參數(shù)是用于向上一活動(dòng)返回的處理結(jié)果,一般只是用RESULT_OK或者RESULT_CANCELED.。第二個(gè)參數(shù)則是把帶有數(shù)據(jù)intent傳遞回去。最后調(diào)用finish()方法來(lái)銷(xiāo)毀當(dāng)前的活動(dòng)。
因?yàn)槲覀兪鞘褂胹tartActivityForResult()方法來(lái)啟動(dòng)SecondActivity的,所以在SecondActivity銷(xiāo)毀之后就i會(huì)回調(diào)上一活動(dòng)的onActivityResult()方法;因此我們?cè)贔irstActivity中需要重寫(xiě)此方法來(lái)接受返回的數(shù)據(jù),如下
@override
protected void onActivityResult(int requestCode, int resultCode, intent data){{
switch(requestCode){
case 1;
if(resultCode==RESULT_OK){
String returnData=data.getStringExtra(data_return);
}
break;
default;
}
}
onActivityResult()方法需要傳入三個(gè)參數(shù)。第一個(gè)參數(shù)是request也就是我們?cè)趩?dòng)活動(dòng)時(shí)傳入的1;第二個(gè)參數(shù)是resultCode,也就是返回?cái)?shù)據(jù)的RESULT_OK.。第三個(gè)參數(shù),data 就是返回?cái)?shù)據(jù)的intent.