startActivityForResult的用法

 总结一下stratActivityForResult的用法,虽然之前已经用过好多次,但是,最近用的一次中出现了失误,看来本人还是对这个掌握的不好,特此写下来,总结一下。startActivityForResult的主要作用是,使用这个方法启动一个activity,在被启动的这个activity  调用  finish之后,就会执行启动者Activity的onActivityResult方法,这个方法有3个参数,分别是requestCode,resultCode和data。其中,requestCode和resultCode分别为int型,data为intent对象。至于这3个参数怎么来的,听我下面分析。

   首先,模拟一个场景,用户要更改昵称,在更改完昵称后,原来的页面的昵称也要改成更改后的昵称。所以,首先,使用startActivityForResulyt启动一个页面,去修改昵称。代码如下:

   

Intent intent=new Intent();
intent.setClass(A.this, B.class);
Bundle bundle=new Bundle();
String str1="aaaaaa";
bundle.putString("str1", str1);
intent.putExtras(bundle);
startActivityForResult(intent, 0);//这里采用startActivityForResult来做跳转,此处的0为一个依据,可以写其他的值,但一定要>=0

然后,用户在这个页面改完了,点击返回,回到原来界面,而且原来界面要显示刚刚改的昵称。代码如下:

setResult(RESULT_OK, intent); //intent为A传来的带有Bundle的intent,当然也可以自己定义新的Bundle
finish();//此处一定要调用finish()方法

Android activity的setResult()在什么时候调用(重点也是难点)

如果在startActivityForResult起来的Activity里面设置setResult,结果并不会马上返回给parent的Activity,只有当前Activity被finish,结果才会被发送给parent的onActivityResult去处理!

这个时候,在A中 重写onActivityResult方法,用来接收B回传的数据。
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
switch (resultCode) { //resultCode为回传的标记,我在B中回传的是RESULT_OK
   case RESULT_OK:
    Bundle b=data.getExtras(); //data为B中回传的Intent
    String str=b.getString("str1");//str即为回传的值
    break;
default:
    break;
    }
}
注意:在onActivityResult中,可以根据requestCode来判断,也可以根据resultCode来判断,但是switch语句下面case里的值一定要对应!!!!比如,你根据requestCode来判断,就只能写你startActivityForResult时候的请求值,绝对不能写Activity的返回值。否则的话,onActivityResult方法是不会执行的。小编就是犯了这个错误,深有体会,请大家引以为戒!
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值