前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Android startActivityForResult用法

Android startActivityForResult用法

作者头像
全栈程序员站长
发布2022-09-14 11:00:16
3590
发布2022-09-14 11:00:16
举报
文章被收录于专栏:全栈程序员必看

大家好,又见面了,我是你们的朋友全栈君。

一、介绍

当我们在第一个Activity打开第二个Activity时,第二个Activity关闭并想返回数据给第一个Activity时我们就可以使用startActivityForResult进行传值。

用到的几个方法介绍:

1. startActivityForResult(Intent intent, int requestCode)

requestCode:如果> = 0,当Activity结束时requestCode将归还在onActivityResult()中。以便确定返回的数据是从哪个Activity中返回,用来标识目标activity。

2. onActivityResult(int requestCode, int resultCode, Intent data)

requestCode:用于与startActivityForResult中的requestCode中值进行比较判断,是以便确认返回的数据是从哪个Activity返回的。

resultCode:是由子Activity通过其setResult()方法返回。适用于多个activity都返回数据时,来标识到底是哪一个activity返回的值。

上面两个值感觉Android就是为了保证数据的严格一致性特地设置了两把锁,来保证数据的发送,目的地的严格一致性。

3. setResult(int resultCode, Intent data)

resultCode:当Activity结束时resultCode将归还在onActivityResult()中,一般为RESULT_CANCELED , RESULT_OK该值默认为-1。

二、示例

1、使用系统提供的startActivityForResult(Intent intent, int requestCode)方法打开新的Activity,为了得到传回的数据,必须在Activity中重写onActivityResult(int requestCode, int resultCode, Intent data)方法用来接收返回数据:

代码语言:javascript
复制
public class MainActivity extends Activity {
    private final static String TAG="MainActivity";
    
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        Button btnOpen=(Button)this.findViewById(R.id.btnOpen);
        btnOpen.setOnClickListener(new View.OnClickListener(){
            public void onClick(View v) {
                
                //第二个参数为请求码,可以根据业务需求自己编号
                startActivityForResult(new Intent(MainActivity.this, OtherActivity.class), 1);
            }
        });
    }
    
    /**
     * 为了得到传回的数据,必须在前面的Activity中(指MainActivity类)重写onActivityResult方法
     * 
     * requestCode 请求码,即调用startActivityForResult()传递过去的值
     * resultCode 结果码,结果码用于标识返回数据来自哪个新Activity
     */
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        String result = data.getExtras().getString("result");//得到新Activity 关闭后返回的数据
        Log.i(TAG, result);
    }
}

2、使用startActivityForResult(Intent intent, int requestCode)方法打开新的Activity,新Activity关闭前需要向前面的Activity返回数据需要使用系统提供的setResult(int resultCode, Intent data)方法实现:

代码语言:javascript
复制
public class OtherActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.other);

        Button btnClose=(Button)findViewById(R.id.btnClose);
        btnClose.setOnClickListener(new View.OnClickListener(){
            public void onClick(View v) {
                //数据是使用Intent返回
                Intent intent = new Intent();
                //把返回数据存入Intent
                intent.putExtra("result", "My name is linjiqin");
                //设置返回数据
                OtherActivity.this.setResult(RESULT_OK, intent);
                //关闭Activity
                OtherActivity.this.finish();
            }
        });
        
    }

}

点击返回button需要在onClick里面实现/直接按Back键返回,需要重写onBackPressed方法

setResult()方法的第一个参数值可以根据业务需要自己定义,上面代码中使用到的RESULT_OK是系统Activity类定义的一个常量,值为-1,代码片断如下: public class android.app.Activity extends ……{ public static final int RESULT_CANCELED = 0; public static final int RESULT_OK = -1; public static final int RESULT_FIRST_USER = 1; }

其实使用startActivityForResult跳转到另一个Activity后,Activity在其finish()动作或者back动作后,会回调主Activity的onActivityResult()方法。我们只需重写onActivityResult(int requestCode, int resultCode, Intent data)方法,根据请求码和返回码进行判断,然后进行相应的处理。这里需要注意一点,Activity在使用手机返回键返回主Activity时,返回码是RESULT_CANCELED = 0。我们一般使用setResult(RESULT_OK, intent);将我们的返回码设置为RESULT_OK = -1,这样可以避免无用的判断

注意:在Fragment中使用startActivityForResult的时候,不要使用getActivity().startActivityForResult,而是应该直接使startActivityForResult()。 参考文章 startActivityForResult的使用

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/157238.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022年7月1,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、介绍
  • 二、示例
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档