0 概述:Android之intent传值的三种方法
0.1 startActivity();
0.2 startActivityForResult();
0.3 调用在下个activity自定义的方法”actionStart()”,也就是最佳的方法。
1.1 MainActivity
/* 在MainActivity中定义如下代码 */button1.setOnClickListener(newOnClickListener() {@OverridepublicvoidonClick(View v) { Intent intent =newIntent(MainActivity.this,TwoActivity.class);//在Intent对象当中添加一个键值对intent.putExtra("key","value"); startActivity(intent); }});
1.2 TwoActivity
/* 在TwoActivity中定义如下代码 */publicclassTwoActivityextendsActivity{@OverrideprotectedvoidonCreate(Bundle savedInstanceState) { button2.setOnClickListener(newOnClickListener() {@OverridepublicvoidonClick(View v) {//取得从上一个Activity当中传递过来的Intent对象Intent intent = getIntent();//从Intent当中根据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 回调数据式传值跳转:startActivityForResult()方法
2.1 MainActivity
button1.setOnClickListener(newOnClickListener() {@OverridepublicvoidonClick(View v) { Intent intent =newIntent(MainActivity.this,TwoActivity.class); intent.putExtra("key","value");// 第二个参数是请求码,只要是一个唯一值startActivityForResult(intent,1234); }});// 由于我们是使用startActivityForResult()方法来启动TwoActivity的,在TwoActivity被销毁之后会回调上一个活动的onActivityResult()方法@OverrideprotectedvoidonActivityResult(intrequestCode,intresultCode, Intent intent) {switch(requestCode) {case1234:if(resultCode == RESULT_OK) {//接收对象//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传递的数据Intent intent = getIntent();if(intent !=null) { String value = intent.getStringExtra("key"); } button2.setOnClickListener(newOnClickListener() {@OverridepublicvoidonClick(View v) {//传递对象//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");// 专门用于向上一个活动返回数据。第一个参数用于向上一个活动返回结果码,一般只使用RESULT_OK或RESULT_CANCELED这两个值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 问题描述
在真正的项目开发中经常会有对接的问题出现。如:TwoActivity并不是由你开发的,但现在你负责的部分需要有启动TwoActivity这个功能,而你却不清楚启动这个活动需要传递哪些数据。
3.1 MainActivity
button1.setOnClickListener(newOnClickListener() {@OverridepublicvoidonClick(View v) {/*最佳数据传值方法:调用在下个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); }/*最佳数据传值方法*/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 结论
实现后,所有TwoActivity中需要的数据都是通过actionStart()方法的参数传递过来的,然后把它们存储到Intent中,最后调用startActivity()方法启动TwoActivity。