使用Intent在活動(dòng)中傳遞數(shù)據(jù)
通過前面的學(xué)習(xí)竹挡,我們了解到了使用Intent啟動(dòng)活動(dòng),撥打電話立膛,發(fā)送短信。獲取地理位置信息宝泵,在這一節(jié)我們將繼續(xù)使用Intent在活動(dòng)之間傳遞數(shù)據(jù)好啰,Intent中提供了putExtra()方法的重載鲁猩,該方法使用可以把要傳遞的數(shù)據(jù)暫時(shí)存儲在Intent中,當(dāng)啟動(dòng)另一個(gè)Activity時(shí)廓握,只要再從中取出數(shù)據(jù)就可以嘁酿,比如在FirstActivity中向SecongActivity中傳遞一個(gè)字符串時(shí),可以使用以下:
在FirstActivity中寫如下代碼
String data="Hello SecondActivity";//聲明需要在兩個(gè)活動(dòng)中傳遞數(shù)據(jù)
Intent intent=new Intent();//新建一個(gè)Intent對象
intent.setClass(FirstActivity.this ,SecondActivirty.class);//設(shè)置intent的執(zhí)行動(dòng)作:啟動(dòng)SecondActivity
intent.putExtra("extra_data",data);
startActivity(intent);
在putExtra()方法中傳入兩個(gè)參數(shù)闹司,這兩個(gè)參數(shù)是Key-Value的鍵值對;
在SecondActivity我們?nèi)〕鰯?shù)據(jù)的代碼如下
Intent intent=getIntent();
String data=intent.getStringExtra("extar_data");
log.d("SecondActivity".data);
在如上述的代碼中游桩,我們首先新建Intent對象,并通過getIntent()方法獲取用于啟動(dòng)SecondActivity的Intent傳遞過來的數(shù)據(jù)data;因?yàn)槲覀?輸入是data是一個(gè)字符串借卧,所以我們調(diào)用getsStringExtra()方法來獲取該數(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();此方法也是用來啟動(dòng)活動(dòng)的挂签;但不同的是在這一個(gè)方法中疤祭,是在活動(dòng)銷毀的時(shí)候能夠返回一個(gè)結(jié)果給上一個(gè)活動(dòng)。
startActivityForResult()方法傳入其中的兩個(gè)參數(shù)饵婆,第一個(gè)參數(shù)是:Intent勺馆。第二個(gè)參數(shù)是請求碼(用于在后面的回調(diào)方法中判斷該數(shù)據(jù)的來源。具體的實(shí)現(xiàn):
我在FirstActivity中聲明如下:
//聲明Intent的執(zhí)行動(dòng)作
Intent intent=new Intent(FirstActivity.this , SecondActivirty.calss);
//啟動(dòng)活動(dòng)方法中的請求碼只要是唯一值就可以 了
startActivityForResult(intent,1);
接下來在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()方法來銷毀當(dāng)前的活動(dòng)。
因?yàn)槲覀兪鞘褂胹tartActivityForResult()方法來啟動(dòng)SecondActivity的紧卒,所以在SecondActivity銷毀之后就i會回調(diào)上一活動(dòng)的onActivityResult()方法侥衬;因此我們在FirstActivity中需要重寫此方法來接受返回的數(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也就是我們在啟動(dòng)活動(dòng)時(shí)傳入的1轴总;第二個(gè)參數(shù)是resultCode,也就是返回?cái)?shù)據(jù)的RESULT_OK.。第三個(gè)參數(shù)博个,data 就是返回?cái)?shù)據(jù)的intent.