android的onActivityResult的使用

本文介绍如何在Android应用中实现Activity间的参数传递,包括使用startActivityForResult启动Activity及回调处理,利用Intent与Bundle进行数据交换。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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等。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值