首先给大家介绍一下android中的activity:
一个activity一般代表手机屏幕的一屏,概念相当与网页。一般来说一个android应用是由一个或多个activity组成,activity直接可进行跳转,直接也可以通过回调方法传递参数。
activity之间的参数传递:
首先我们新建两个按钮,分别在layout1,layout2中,按钮的id为btn1,btn2,然后在分别建立两个activity分别为Activity1,Activity2。Activity1分别和layout1关联,Activity2分别和layout2关联,我们接下来要做的事情就是在Activity1中把参数传递到Activity2中,然后在Activity2运行完成的时候并返回到Activity1的时候,Activity1再从获取Activity2中参数。
这是Activity1中的代码:
01
<p><span> @Override
02
public void onCreate(Bundle savedInstanceState) {
03
super.onCreate(savedInstanceState);
04
setTitle("这是activity1");
05
setContentView(R.layout.layout1);
06
07
//单击button2
08
Button btn1 = (Button) findViewById(R.id.btn1);
09
btn2.setOnClickListener(new Button.OnClickListener() {
10
@Override
11
public void onClick(View v) {
12
Intent intent1 = new Intent(MainActivity.this, Activity3.class);
13
intent1.putExtra("activity1", "数据来自activity1");
14
startActivityForResult(intent1, REQUEST_CODE);
15
}
16
});
17
} </span></p>
18
<p>成时调用onActivityResult方法</p>
19
<p><span>@Override
20
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
21
if(requestCode == REQUEST_CODE){
22
if(resultCode == RESULT_CANCELED){
23
setTitle("取消");
24
}else if(resultCode == RESULT_OK){
25
System.out.println("这里已经执行...");
26
String txt = "";
27
Bundle extras = data.getExtras();
28
if(extras != null){
29
txt = extras.getString("store");
30
}
31
setTitle("这里是</span><span style="font-family:'sans serif', tahoma, verdana, helvetica;font-size:13px;line-height:19px;white-space:normal;background-color:#ffffff;">Activity1</span><span>:" + txt);
32
}
33
}
34
}</span></p>
这是Activity2中的代码:
01
<span>@Override
02
protected void onCreate(Bundle savedInstanceState) {
03
super.onCreate(savedInstanceState);
04
setTitle("这是activity2");
05
setContentView(R.layout.layout2);
06
Bundle bundle = getIntent().getExtras();
07
if(bundle != null){
08
setTitle("这里是Activity2:" + bundle.getString("</span><span style="line-height:19px;">activity1</span>"));<span>}
09
10
Button btn = (Button) findViewById(R.id.btn2);
11
btn.setOnClickListener(new Button.OnClickListener() {
12
@Override
13
public void onClick(View v) {
14
Bundle bundle = new Bundle();
15
bundle.putString("store", "这是Activity2中传递过来的数据");
16
Intent mIntent = new Intent();
17
mIntent.putExtras(bundle);
18
setResult(RESULT_OK, mIntent);
19
finish();
20
}
21
});
22
}</span>
首先解释一下startActivity()和startActivityForResult()这两种方法的不同:前者是启动一个新的Activity,当新的Activity执行完成后不会执行回调函数,
当然也不会有任何的返回值;后者也是启动一个新的Activity,并且当新的Activity运行结束的时候,还必须执行旧的Activity里面的
回调函数,这个回调函数叫做onActivityResult(),其中startActivityForResult()里面有两个参数,第一个参数是你声明的
Intent,第二个参数是请求码,如果请求码大于0的时候,当新的Activity结束的时候,这个请求码返回到onActivityResult(),
然后通过不同的请求码在回调函数onActivityResult()中针对不同的返回值执行不同的代码操作。其中onActivityReuslt()这也是
一个回调函数,当新的Activity执行完成后,还必须执行旧的Activity的这个回调函数。
参数传递:Activity和Activity之间的参数传递是通过Bundle的键值对来传递,Bundle是对HashMap的重新封装,但是Bundle只能
存放基本类型,比如:String/int/byte/boolean/char等。