Activity提供了startActivityForResult(Intent intent, int requestCode)方法打开新的Activity,新的Activity关闭后会向前面的Activity传回数据,为了能得到传回的数据,必须在旧的Activity中覆写onActivityResult(int requestCode, int resultCode, Intent data)方法,onActivityResult方法的回调时机是:You will receive this call immediately before onResume() when your activity is re-starting。大概是说当旧的Activity重新启动(获得焦点,开始与用户交互)时,在回调onResume()方法前会立刻调用此方法。

  新的Activity返回的数据通过Intent进行传递,当新的Activity关闭后,旧的Activity就会调用onActivityResult()方法,把存放了返回数据的Intent作为onActivityResult()方法的第三个参数传入,在onActivityResult()方法通过使用第三个参数就可以获取到新的Activity返回的数据。

  新的Activity返回数据要通过setResult(int resultCode,Intent data), 第一个参数是请求码,第二个参数是携带返回数据的Intent。

  请求码(requestCode)的作用:

  使用startActivity(Intent intent, int requestCode)方法打开新的Activity,我们需要为startActivityResult()方法传入一个请求码(第二个参数)。请求码的值是根据业务需要自由设定的,用于标识请求来源。例如:一个Activity有两个按钮,点击这两个按钮都会打开同一个Activity,不管是哪个按钮打开新的Activity,当这个新的Activity关闭后,系统都会调用前面Activity的onActivityResult(int requestCode, int resultCode, Intent data)方法,在onActivityResult()方法如果需要知道新的Activity是由哪个按钮打开的,并且要做出相应的业务处理,这时可以这样做:

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

  结果码(resultCode)的作用:

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

(New1Activity和New2Activity是要打开的新的Activity)

 public  class  New1Activity extends Activity{
......
New1Activity.setResult(1 , intent);
finish();
}
 public class New2Activity extends Activity{
......
New2Activity.setResult(2,intent);
finish();
}
 public class MianActivity extends Activity{
//在该Activity中,会打开上面的两个Activity
...........
@Override
protected void onActivityResult(int requestCode,int resultCode,Intent data){
switch(resultCode){
case 1:
//获取New1Activity的返回数据
case 2:
//获取New2Activity的返回数据
}
}
}

  

  

startActivityForResult的更多相关文章

  1. 使用startActivityForResult场景模拟

    效果图如下,当我从第一个界面选择供应商的时候,我希望能得到第二个界面选择的供应商的值: 具体代码,这里第二个参数为自定义的大于等于0的数字,用来标记当前跳转. Intent i1 = new Inte ...

  2. 浅谈Android中的startActivityForResult和setResult方法

    引言 我们知道,如果想打开一个新的Activity我们可以使用startActivity方法.今天我们介绍的startActivityForResult不仅可以打开全新的Activity,而且当新的A ...

  3. android中使用startactivityforresult跳转Activity后需要重写onBackPressed()方法

    在android项目中经常会用startactivityforresult从一个Activity跳转到另一个Activity(这里指Activity_A和Activity_B),你可以从Activit ...

  4. Android基础:startActivityForResult 和 onActivityResult 问题

    项目中用到弹出Acitivity来获得用户输入 所以用到 onActivityResult()方法接受用户输入 奇怪问题 startActivityForResult() 后直接调用 onActivi ...

  5. Fragment的startActivityForResult和Activity的startActivityForResult的区别

    2016-08-30 18:22:33 前提:我们的APP要兼容Api level 11以前的,所以必须用FragmentActivity 1.对于Fragment的,我们很多时候都会在Activit ...

  6. [Android]Activity跳转传递任意类型的数据、Activity为SingleTask时代替StartActivityForResult的解决方案

    以下内容为原创,欢迎转载,转载请注明 来自天天博客:http://www.cnblogs.com/tiantianbyconan/p/4389674.html 需求:在ActivityA跳转到Acti ...

  7. Fragment的startActivityForResult详细解决方案

    由于要用到Fragment中startActivityForResult,所以一开始就直接用activity.startActivityForResult(intent, 0);发现这样用首先会跳转到 ...

  8. 调用startActivityForResult,onActivityResult无响应的解决办法

    三种情况: 1.执行startActivityForResult,没等到被调用的 Activity 返回,onActivityResult() 就被执行了.找了很久,终于通过小道消息得知,这与 Act ...

  9. 回传数据startActivityForResult()

    1.调用者Activity01开启新的界面选用startActivityForResult(intent,requestCode);在Activity01中Intent intent=new Inte ...

  10. android小知识之fragment中调用startActivityForResult(Intent intent,int requestcode)所遇到的问题

    大家都知道对于Activity和Fragment都可以注册OnActivityResult()方法,但是要注意几点: a.当activity和fragment都注册了OnActivityResult( ...

随机推荐

  1. 启动weblogic11g一直提示<141281> <unable to get file lock, will retry ...>

    一次非正常关闭weblogic之后,再次启动时启动不成功,一直提示:<141281> <unable to get file lock, will retry ...> 解决方 ...

  2. Jzzhu and Cities

    CF #257 div2D:http://codeforces.com/contest/450/problem/D 题意:给你n个城市,m条无向有权边.另外还有k条边,每条边从起到到i.求可以删除这k ...

  3. Selenium webdriver 开始

    最早接触的selenium是 selenium IDE,当时是为了准备论文.为了用IDE还下载了Firefox浏览器.后来接触过两个项目都需要selenium,一个采用selenium webdirv ...

  4. 在EF中执行SQL语句

    你可能要问,我用EF不就为了避免写SQL吗?如果要写SQL我不如直接用ADO.NET得了.话虽然这么说没错,可有些时候使用EF操作数据还是有一些不方便,例如让你根据条件删除一组记录,如果按照正常的流程 ...

  5. 关于Hibernate脏检查与快照

    脏检查 Session到底是如何进行脏检查的呢?当一个Customer对象被加入到Session缓存中时,Session会 为Customer对象的值类型的属性复制一份快照.当Session清理缓存时 ...

  6. IOS实现小型计算器

    作为一名初学者,编辑一款能够在IOS操作系统上运行的计算器是一件很值得自豪的事情,网络上虽然后很多相关的文章和代码,功能也很强大但是我感觉相关的计算器比加复杂,晦涩难懂,所以我想通过这个小小的计算器, ...

  7. [置顶] hdu 1890 伸展树区间翻转

    题意: 给你n个数,每次先输出第i大的数的位置(如果有多个,选下标小的那个),然后每次将第i个位置到第i大的数所在位置之间的数进行翻转. 思路:输入的数组可能有多个相同的值,我们可以进行两次排序把数组 ...

  8. [MongoDB] Introduce to MongoDB

    1. Use or create a database: use wandRecorder You will use keyword to create or fetch a exicting dat ...

  9. linux 启动network后报错:device eth0 does not seem to be present, delaying initialization

    问题背景: 在vsphere client中部署ovf模板后启动linux 的network后提示:device eth0 does not seem to be present, delaying ...

  10. ubuntu下mysql中文乱码问题

    本来就是想弄个网页往数据库里添加数据的,然后就发现了mysql的中文乱码问题,弄了半天解决方法如下: 首先停mysql服务,编辑配置文件my.cnf $ sudo stop mysql $sudo v ...