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

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


简介

  • startActivityForResult(Intent intent, Int requestCode)
  • setResut(int resultCode, Intent intent)
  • onActivityResult(int requestCode, int resultCode, Intent intent)

1.startActivityForResult(Intent intent, Int requestCode) 当开启一个需要返回处理结果的Activity时使用当前这个方法

    参数1:intent 用来启动具体哪个Activity的意图(显示启动)
    参数2:requestCode从字面上的意思看它叫请求码,我对这个参数的理解是用来标记具体请求的哪个页面,可以使用一个私有的静态方法来表示,
    它最后要跟onActivityResult()方法中的requestCode参数进行比对,判断是否为我要请求的页面返回的数据,其实这个参数仅仅只是用在当前类,
    所以用一个静态方法来表示就好了。

示例代码:

private static final int GO_MAIN_REQUEST = 1231;
private Context mContext;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main2);
        mContext = this;
        Button btn = (Button) findViewById(R.id.button);
        btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent();
                intent.setClass(mContext, Main3Activity.class);
                //这里就是简单的应用了
                startActivityForResult(intent,GO_MAIN_REQUEST);
            }
        });

    }

然后在开启的Activity中进行一些数据的处理,当页面即将关闭的时候使用setResult()方法,将处理的结果码设置为第一个参数,页面的关闭需要手动调用finish()方法,如果不设置的话会无法走到onActivityResult()方法。具体情况如果有需要的小伙伴可以查看源码。

2.setResult()。设置页面处理的结果码

参数1:resultCode,字面意思为结果码,我理解的含义为当前页面处理完数据后,需要返回给上一页面的具体的状态(比如说:成功了,失败了什么的)
因为这个结果码需要在onActivityResult()中跟resultCode进行比对,所以这个返回的结果码最好是定义为公共的静态变量。当然安卓也帮我定义了
三个常量,分别为成功:RESULT_OK;取消:RESULT_CANCELED;首次执行:RESULT_FIRST_USER;如果没有特殊需要可以直接使用
参数2:intent,当如果需要返回一些数据的时候,可以new一个Intent传递一些数据回上一个页面

代码示例

  public static final int SUCCESS_TAG = 131;
  public static final int DEFEAT_TAG = 132;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main3);
        //这里写的是一些伪代码,大家明白就行
        Button defeat = new Button(Main3Activity.this);
        Button success = new Button(Main3Activity.this);
        defeat.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                setResult(DEFEAT_TAG);
                finish();
            }
        });
        success.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                setResult(SUCCESS_TAG);
                finish();
            }
        });
    }

3.onActivityResult()

这个方法中有三个参数
参数1:requestCode请求码,用来比对哪一个Activity返回的数据
参数2:resultCode结果码,用来判断上一个页面的处理结果
参数3:data返回的数据

示例代码

@Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (GO_MAIN_REQUEST == requestCode) {
            // do something
            if (Main3Activity.SUCCESS_TAG == resultCode) {
                //do success
            }
        }

    }

好了先简单的介绍这些

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值