startActivityForResult 和 setResult

前几天朋友问我关于Activity之间交互的问题,趁着有时间简单总结总结下:

1、从一个Activity(A) 启动一个新的Activity(B)

这个平常我们用的比较多,直接使用Intent,在Activity(A),如下:

    Intent intent = new Intent(A.this,B.class);
    intent.putExtra("key", "value");
    startActivity(intent);

在这里可以传递八种基本数据类型(int,String,long,boolean等),以及Bundle(类似Map集合)。

B中接收传递的参数如下:

    String s = getIntent().getExtras().getString("key");

也可以用:

  String s = getIntent().getExtras().getString("key","");

2、在某些情况下,在Activity(A)启动Activity(B)的同时,我们又希望B能给A返回特定的数据,比如说现在A里有一个包含用户个人信息的列表,点击增加用户信息启动B,

B里完成之后通知A刷新列表,具体使用如下:

启动Acitivty(B):在这里我们不使用startActivity,而用startActivityForResult,如下:

       public static final int requestCode = 1;   //声明全局变量
       Intent intent = new Intent(A.this,B.class);
       startActivityForResult(inten t, requestCode);

同时在A中重新onActivityResult方法:

    /**
     * requestCode 与startActivityForResult 中的requestCode对应
     * resultCode  返回的结果状态,通常有三种:正确,错误,取消,这个比较宽泛,可以自己定义
     * data  返回的数据通常在data里面
     */
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if(resultCode != RESULT_OK){
            return;
        }
        if(requestCode == 1){
            String s = data.getStringExtra("key");
        }
    }

在B中:

      Intent intent = new Intent();
      intent.putExtra("key", "value");
      setResult(RESULT_OK, intent); //第一个参数对应于onActivityResult中的resultCode  intent对应于data

这里注意一点:setResult一定要在finish()之前调用。

时间: 2024-08-22 22:24:08

startActivityForResult 和 setResult的相关文章

startActivityForResult和setResult详解

原文:startActivityForResult和setResult详解 startActivityForResult与startActivity的不同之处在于:1.startActivity( ) 仅仅是跳转到目标页面,若是想跳回当前页面,则必须再使用一次startActivity( ).2.startActivityForResult( ) 可以一次性完成这项任务,当程序执行到这段代码的时候,假若从T1Activity跳转到下一个Text2Activity,而当这个Text2Activit

Android -- startActivityForResult和setResult

startActivityForResult与startActivity的不同之处 startActivity( ) 仅仅是跳转到目标页面,若是想跳回当前页面,则必须再使用一次startActivity( ). startActivityForResult( ) 可以一次性完成这项任务,当程序执行到这段代码的时候,假若从T1Activity跳转到下一个Text2Activity,而当这个Text2Activity调用了finish()方法以后,程序会自动跳转回T1Activity,并调用前一个T

startActivityForResult、setResult的用法

startActivityForResult和setRsult的具体作用: 第一个activity向第二个activity传递数据,第二个activity接受之后做一些处理,,,,然后A又要利用这些数据继续做一些操作,就是利用回传值. 第一个activity的代码: public class MainActivity extends Activity implements OnClickListener { private Button but; private EditText edit; p

Android之startActivity、startActivityForResult和setResult详解

[PS:还是以GOOGLE原生的BluetoothChat为例] 1. startActivity与startActivityForResult的区别 startActivity( ) 仅仅是跳转到目标页面,若是想跳回当前页面,则必须再使用一次startActivity( ). startActivityForResult( ) 可以一次性完成这项任务,当程序执行到这段代码的时候,假若从T1Activity跳转到下一个Text2Activity, 而当这个Text2Activity调用了fini

执行setResult后的回调顺序

A --> startActivityForResult --> B -->setResult 不执行finish 方法  A是在B执行了setResult方法还是B被finish后执行onActivityResult方法? A --> startActivityForResult --> B -->setResult --> finish 如果栈里面A和B中间还有activity  A将不会在(B setResult和finish)后执行onActivityRe

Android Activity使用拾遗

一.onWindowFocusChanged 有时我们需要测量一个Activity多长时间才能显示出来,那么在代码中打点计时的时机选在哪儿呢?在onCreate和onResume执行完成后,Activity的界面仍不可见,在onResume之后,framework还会回调一个叫onWindowFocusChanged的函数,它表示用户是否已经可以与Activity的界面进行交互了.onWindowFocusChanged为true意味着Activity的界面已经能够被用户看到了(自然也能和用户交

Android总结篇系列:Activity中几个主要函数详解

专注Android领域开发. 仰望星空,同时需要脚踏实地. ——好记性不如烂博客 Android总结篇系列:Activity中几个主要函数详解 Activity作为Android系统中四大基本组件之一,包含大量的与其他的各大组件.intent.widget以及系统各项服务等之间的交互的函数.在此,本文主要选取实际项目开发中常用的,但完全理解又需要有一定深入了解的几个函数进行讲解,后续本文会根据需要不断更新. 1. startActivityForResult / onActivityResult

在普通class里使用onActivityResult获取从一个activity返回的数据 (待解)

通常当我们需要从当前activity a启动一个activity b,并希望在b finish之前返回一些数据给a,就使用startActivityForResult,onActivityResult,setResult这些函数.但是这些函数是定义在Activity里面的,普通的class里面没有这些函数. 当我希望在一个fragment里面startActivityOnResult另一个activity,并将返回的数据交给fragment所属的activity处理,我在fragment里面定义

java.lang.IllegalStateException: Can not perform this action after onSaveInstanceState

1. 场景: 在开发过程中遇到这么一个需要,在主页点击按钮进入另一个Activity(ReadActivity),在该ReadActivity中点击一个按钮再返回主页并指定主页选中特定的Tab.主页是用FragmentTabHost + Fragment 实现.思路是通过startActivityForResult以及setResult() 以及requestCode作为标志位,是ReadActivity返回,因为还有其他的requestCode.再通过 FragmentTabHost的setC