activity之间的参数传递:
首先我们新建两个按钮,分别在layout1,layout2中,按钮的id为btn1,btn2,然后在分别建立两个activity分别为Activity1,Activity2。Activity1分别和layout1关联,Activity2分别和layout2关联,我们接下来要做的事情就是在Activity1中把参数传递到Activity2中,然后在Activity2运行完成的时候并返回到Activity1的时候,Activity1再从获取Activity2中参数。
这是Activity1中的代码:
02 |
public void onCreate(Bundle
savedInstanceState) { |
03 |
super .onCreate(savedInstanceState); |
04 |
setTitle( "这是activity1" ); |
05 |
setContentView(R.layout.layout1); |
08 |
Button
btn1 = (Button) findViewById(R.id.btn1); |
09 |
btn2.setOnClickListener( new Button.OnClickListener()
{ |
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); |
18 |
<p>成时调用onActivityResult方法</p> |
20 |
protected void onActivityResult( int requestCode, int resultCode,
Intent data) { |
21 |
if (requestCode
== REQUEST_CODE){ |
22 |
if (resultCode
== RESULT_CANCELED){ |
24 |
} else if (resultCode
== RESULT_OK){ |
25 |
System.out.println( "这里已经执行..." ); |
27 |
Bundle
extras = data.getExtras(); |
29 |
txt
= extras.getString( "store" ); |
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); |
这是Activity2中的代码:
02 |
protected void onCreate(Bundle
savedInstanceState) { |
03 |
super .onCreate(savedInstanceState); |
04 |
setTitle( "这是activity2" ); |
05 |
setContentView(R.layout.layout2); |
06 |
Bundle
bundle = getIntent().getExtras(); |
08 |
setTitle( "这里是Activity2:" +
bundle.getString( "</span><span
style=" line-height:19px; ">activity1</span>" ));<span>
} |
10 |
Button
btn = (Button) findViewById(R.id.btn2); |
11 |
btn.setOnClickListener( new Button.OnClickListener()
{ |
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); |
首先解释一下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等。