0 概述:Android之intent傳值的三種方法
0.1 startActivity();
0.2 startActivityForResult();
0.3 調(diào)用在下個(gè)activity自定義的方法”actionStart()”,也就是最佳的方法懈词。
1 最常用傳值跳轉(zhuǎn):startActivity()方法
1.1 MainActivity
/* 在MainActivity中定義如下代碼 */button1.setOnClickListener(newOnClickListener() {@OverridepublicvoidonClick(View v) { Intent intent =newIntent(MainActivity.this,TwoActivity.class);//在Intent對(duì)象當(dāng)中添加一個(gè)鍵值對(duì)intent.putExtra("key","value"); startActivity(intent); }});
1.2 TwoActivity
/* 在TwoActivity中定義如下代碼 */publicclassTwoActivityextendsActivity{@OverrideprotectedvoidonCreate(Bundle savedInstanceState) {? ? ? ? button2.setOnClickListener(newOnClickListener() {@OverridepublicvoidonClick(View v) {//取得從上一個(gè)Activity當(dāng)中傳遞過來的Intent對(duì)象Intent intent = getIntent();//從Intent當(dāng)中根據(jù)key取得valueif(intent !=null) {? ? ? ? ? ? ? ? ? ? String value = intent.getStringExtra("key");? ? ? ? ? ? ? ? }? ? ? ? ? ? }? ? ? ? });? ? }}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
2 回調(diào)數(shù)據(jù)式傳值跳轉(zhuǎn):startActivityForResult()方法
2.1 MainActivity
button1.setOnClickListener(newOnClickListener() {@OverridepublicvoidonClick(View v) {? ? ? ? ? ? Intent intent =newIntent(MainActivity.this,TwoActivity.class);? ? ? ? ? ? intent.putExtra("key","value");// 第二個(gè)參數(shù)是請(qǐng)求碼景埃,只要是一個(gè)唯一值startActivityForResult(intent,1234);? ? }});// 由于我們是使用startActivityForResult()方法來啟動(dòng)TwoActivity的,在TwoActivity被銷毀之后會(huì)回調(diào)上一個(gè)活動(dòng)的onActivityResult()方法@OverrideprotectedvoidonActivityResult(intrequestCode,intresultCode, Intent intent) {switch(requestCode) {case1234:if(resultCode == RESULT_OK) {//接收對(duì)象//Bundle bundle = data.getExtras();//AddressBean addressBean = (AddressBean) bundle.getSerializable(Constant.ADDRESSBEAN);String returnedData = intent.getStringExtra("key1");? ? ? ? ? ? ? ? }break;default:? ? ? ? }? ? }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
2.2 TwoActivity
publicclassTwoActivityextendsActivity{@OverrideprotectedvoidonCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);//接收從MainaActivity傳遞的數(shù)據(jù)Intent intent = getIntent();if(intent !=null) {? ? ? ? ? ? String value = intent.getStringExtra("key");? ? ? ? }? ? ? ? button2.setOnClickListener(newOnClickListener() {@OverridepublicvoidonClick(View v) {//傳遞對(duì)象//Intent intent = new Intent();//Bundle bundle = new Bundle();//bundle.putSerializable(Constant.ADDRESSBEAN, addressArray.get(position));//intent.putExtras(bundle);//setResult(RESULT_OK, intent);//finish();Intent intent =newIntent();? ? ? ? ? ? ? ? intent.putExtra("key1","value two activity");// 專門用于向上一個(gè)活動(dòng)返回?cái)?shù)據(jù)咙边。第一個(gè)參數(shù)用于向上一個(gè)活動(dòng)返回結(jié)果碼审编,一般只使用RESULT_OK或RESULT_CANCELED這兩個(gè)值setResult(RESULT_OK, intent)撼班;? ? ? ? ? ? ? ? finish();? ? ? ? ? ? }? ? ? ? });? ? }}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
3.0 問題描述
在真正的項(xiàng)目開發(fā)中經(jīng)常會(huì)有對(duì)接的問題出現(xiàn)。如:TwoActivity并不是由你開發(fā)的垒酬,但現(xiàn)在你負(fù)責(zé)的部分需要有啟動(dòng)TwoActivity這個(gè)功能砰嘁,而你卻不清楚啟動(dòng)這個(gè)活動(dòng)需要傳遞哪些數(shù)據(jù)。
3.1 MainActivity
button1.setOnClickListener(newOnClickListener() {@OverridepublicvoidonClick(View v) {/*最佳數(shù)據(jù)傳值方法:調(diào)用在下個(gè)activity自定義的方法*/TwoActivity.actionStart(MainActivity.this,"data1","data2");? ? }});
1
2
3
4
5
6
7
8
9
3.2 TwoActivity
publicclassTwoActivityextendsActivity{@OverrideprotectedvoidonCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);? ? }/*最佳數(shù)據(jù)傳值方法*/publicstaticvoidactionStart(Context context, String data1, String data2) {? ? ? ? Intent intent =newIntent(context, TwoActivity.class);? ? ? ? intent.putExtra("param1", data1);? ? ? ? intent.putExtra("param2", data2);? ? ? ? context.startActivity(intent);? ? }}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
3.3 結(jié)論
實(shí)現(xiàn)后勘究,所有TwoActivity中需要的數(shù)據(jù)都是通過actionStart()方法的參數(shù)傳遞過來的矮湘,然后把它們存儲(chǔ)到Intent中,最后調(diào)用startActivity()方法啟動(dòng)TwoActivity口糕。