关闭

Android中的onActivityResult和setResult方法的使用

137975人阅读 评论(15) 收藏 举报

如果你想在Activity中得到新打开Activity关闭后返回的数据,你需要使用系统提供的startActivityForResult(Intent intent,int requestCode)方法打开新的Activity,新的Activity关闭后会向前面的Activity传回数据,为了得到传回的数据,你必须在前面的Activity中重写onActivityResult(int requestCode, int resultCode,Intent data)方法:

public class MainActivity extends Activity {
      @Overrideprotected void onCreate(Bundle savedInstanceState) {
      Button button =(Button)this.findViewById(R.id.button);
       button.setOnClickListener(new View.OnClickListener(){
//点击该按钮会打开一个新的Activity
        publicvoid onClick(View v) {
        //第二个参数为请求码,可以根据业务需求自己编号
        startActivityForResult(new Intent(MainActivity.this, NewActivity.class),  1);
    }});
        }
    //第一个参数为请求码,即调用startActivityForResult()传递过去的值
    //第二个参数为结果码,结果码用于标识返回数据来自哪个新Activity
   @Override protected voidonActivityResult(int requestCode, int resultCode, Intent data) {
    String result =data.getExtras().getString(“result”));//得到新Activity关闭后返回的数据
    }
}    

当新Activity关闭后,新Activity返回的数据通过Intent进行传递,android平台会调用前面ActivityonActivityResult()方法,把存放了返回数据的Intent作为第三个输入参数传入,在onActivityResult()方法中使用第三个输入参数可以取出新Activity返回的数据。

请求码的作用:

使用startActivityForResultIntent intent . intrequestcode)方法打开新的activity,我们需要为该方法传递一个请求码。请求码的值是根据业务需要由自已设定,

用于标识请求来源。例如:一个Activity有两个按钮,点击这两个按钮都会打开同一个Activity,不管是那个按钮打开新Activity,当这个新Activity关闭后,系统都会调用前面ActivityonActivityResult(int requestCode, int resultCode, Intent data)方法。在onActivityResult()方法如果需要知道新Activity是由那个按钮打开的,并且要做出相应的业务处理,这时可以这样做:

@Override  
public void onCreate(Bundle savedInstanceState) {
        ....
        button1.setOnClickListener(newView.OnClickListener(){
      public void onClick(View v) {
           startActivityForResult (newIntent(MainActivity.this, NewActivity.class), 1);
       }});
        button2.setOnClickListener(newView.OnClickListener(){
      public void onClick(View v) {
           startActivityForResult (newIntent(MainActivity.this, NewActivity.class), 2);
       }}); 
       @Override protected voidonActivityResult(int requestCode, int resultCode, Intent data) {
              switch(requestCode){
                  case 1:
                      //来自按钮1的请求,作相应业务处理
                  case 2:
                   //来自按钮2的请求,作相应业务处理
               }
          }

结果码的作用:用于标示返回结果的来源。

在一个Activity中,可能会使用startActivityForResult()方法打开多个不同的Activity处理不同的业务,当这些新Activity关闭后,系统都会调用前面ActivityonActivityResult(int requestCode, int resultCode, Intentdata)方法。为了知道返回的数据来自于哪个新Activity,在onActivityResult()方法中可以这样做(ResultActivityNewActivity为要打开的新Activity)

public class ResultActivity extends Activity {
       .....
       ResultActivity.this.setResult(1, intent);
       ResultActivity.this.finish();
}
public class NewActivity extends Activity {
       ......
        NewActivity.this.setResult(2,intent);
        NewActivity.this.finish();
}
public class MainActivity extends Activity { // 在该Activity会打开ResultActivity和NewActivity
       @Override protected voidonActivityResult(int requestCode, int resultCode, Intent data) {
              switch(resultCode){
                  case 1:
                      // ResultActivity的返回数据
                  case 2:
                  // NewActivity的返回数据
               }
          }
}

需要返回数据或结果的,则使用startActivityForResult (Intent intent, intrequestCode),requestCode的值是自定义的,用于识别跳转的目标Activity。

跳转的目标Activity所要做的就是返回数据/结果,setResult(int resultCode)只返回结果不带数据,或者setResult(int resultCode, Intent data)两者都返回!而接收返回的数据/结果的处理函数是onActivityResult(intrequestCode, int resultCode, Intent data),这里的requestCode就是startActivityForResult的requestCode,resultCode就是setResult里面的resultCode,返回的数据在data里面


《Android应用安全防护和逆向分析》

点击立即购买:京东  天猫


更多内容:点击这里

关注微信公众号,最新技术干货实时推送

编码美丽技术圈
微信扫一扫进入我的"技术圈"世界

扫一扫加小编微信
添加时请注明:“编码美丽”非常感谢!

65
8
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

onActivityResult的用法

主要功能: 在一个主界面(主Activity)上能连接往许多不同子功能模块(子Activity上去),当子模块的事情做完之后就回到主界面,或许还同时返回一些子模块完成的数据交给主Activity...
  • Double2hao
  • Double2hao
  • 2015-12-13 09:56
  • 10993

Android开发基础 startActivityForResult()、onActivityResult()和setResult()方法之间的联系

在以前开发的时候,只是使用过,知道如果要是想从上一个Activity中得到处理的一些状态需要调用这几个方法,但是这几个方法中的参数老是记忆的很混乱,今天在开发项目的时候,忽然想到了一些东西,特意记下免...
  • L_zhp
  • L_zhp
  • 2016-03-29 21:51
  • 2099

Android进阶2之Activity之间数据交流(onActivityResult的用法)

主要功能: 在一个主界面(主Activity)上能连接往许多不同子功能模块(子Activity上去),当子模块的事情做完之后就回到主界面,或许还同时返回一些子模块完成的数据交给主Activity...
  • SJF0115
  • SJF0115
  • 2012-03-23 15:19
  • 49590

再也不需要onActivityResult了。使用响应式解决startActivityForResult和onActivityResult回调繁琐的问题

每次我们使用startActivityForResult方法时,如果需要接收返回的结果,总得在onActivityResult中进行处理。 学习了RxJava以后,体验到了操作符的便捷。因此尝试着解决...
  • u014165633
  • u014165633
  • 2017-02-08 20:21
  • 501

Android中onActivityResult方法总结

onActivityResult方法存在于Activity和Fragment中,主要yong'y
  • hxors
  • hxors
  • 2014-09-11 21:51
  • 689

onActivityResult回调的用法

ActivityA跳转到AddAddressActivity ActivityA中的内容 Intent intent = new Intent(this,AddAddressActivity.cl...
  • w13080042891
  • w13080042891
  • 2016-11-07 14:10
  • 324

Android 注解实现权限管理 APP不再对onRequestPermissionsResult进行操作

1 . 描述 一直以来很烦躁6.0权限管理,特别是一个页面有多个权限的时候,因为每一次不但要包裹method还要在onRequestPermissionsResult方法里面进行不同类型的不同操作...
  • u012521570
  • u012521570
  • 2017-06-15 12:01
  • 3970

startActivityForResult和setResult详解 onActivityResult

Activty a跳转到Activity B时,可以有两种方法,一种是startActivty(),第二种是startActivityForResult()。 方法一 :ActivtyB跳转到Act...
  • u012811342
  • u012811342
  • 2017-02-28 11:58
  • 529

Android onActivityResult获取返回值的用法

现有MainActivity,当它进入到SecondActivity后,在SecondActivity中进行了某些操作然后需要将值返回给MainActivity时, 于是就可以用到onActivit...
  • u011246046
  • u011246046
  • 2015-02-06 12:21
  • 1394

Activity---Activity之间数据交流(onActivityResult的用法)

主要功能: 在一个主界面(主Activity)上能连接往许多不同子功能模块(子Activity上去),当子模块的事情做完之后就回到主界面,或许还同时返回一些子模块完成的数据交给主Activity处理...
  • IT1039871366
  • IT1039871366
  • 2013-08-13 17:31
  • 15749
    《Android应用安全防护和逆向分析》正式开售
    《Android应用安全防护和逆向分析》

    360创始人周鸿祎、CSDN创始人蒋涛、看雪创始人段钢联袂推荐

    零基础学习移动安全逆向,手把手带你进入安全逆向领域!安全不息,逆向不止!让别人的应用都成为我们手中的炮灰!

    读者技术交流QQ群:682646223



    购买地址: 京东 天猫
    技术分享微信公众号
    扫一扫关注

    关注公众号留言可咨询问题和技术交流,推送最新技术文章!
    微信扫一扫加入安全逆向圈

    友情链接
    天真无谐
    我的第一个App:

    天真无谐


    已经上线了,在各大市场都可以搜索到。希望大家多多支持!!


    点击查看详情
    个人资料
    • 访问:5538501次
    • 积分:31935
    • 等级:
    • 排名:第169名
    • 原创:303篇
    • 转载:0篇
    • 译文:0篇
    • 评论:1655条
    博客专栏
    文章分类