Android startActivityForResult用法

Android startActivityForResult用法一、介绍当我们在第一个Activity打开第二个Activity时,第二个Activity关闭并想返回数据给第一个Activity时,我们就可以使用startActivityForResult进行传值。用到的几个方法介绍:1.startActivityForResult(Intentintent,intrequestCode)requestCode:如果>=…

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

一、介绍

当我们在第一个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)方法用来接收返回数据:

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)方法实现:

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.net/157238.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • eclipseUML工具

    eclipseUML工具
    EclipseUML2008-05-0522:05
    来源:lhttp://bach.yo2.cn/articles/category/artoftechnology/page/3
    对于UML工具,我用的并不是太深入,所以仅是对几款小型umltools,以及非专业umltools稍做评价,像RationalRose这种专业uml软件就不比较了。
     
    在选择方面个人比较偏向java,eclipse,逆向工程功能.
    1.MicrosoftVi

    2022年7月12日
    12
  • 下拉框插件select2的使用

    下拉框插件select2的使用

    2021年11月9日
    48
  • java二维数组的创建,java二维数组创建方法

    java二维数组的创建,java二维数组创建方法java动态创建二维数组,从零学java笔录-第31篇图解二位数组在内存中存储,java二维数组动态赋值,java二维数组创建方法二维数组的定义typearrayName[][];type[][]arrayNameJava二维数组的声明、初始化和引用二维数组的声明、初始化和引用与一维数组相似,这里不再详……java定义二维数组的几种写法_计算机软件及应用_IT/计算…

    2022年6月10日
    44
  • MapperScan注解详解[通俗易懂]

    MapperScan注解详解[通俗易懂]1、@Mapper注解:作用:在接口类上添加了@Mapper,在编译之后会生成相应的接口实现类添加位置:接口类上面@MapperpublicinterfaceUserDAO{  //代码}如果想要每个接口都要变成实现类,那么需要在每个接口类上加上@Mapper注解,比较麻烦,解决这个问题用@MapperScan2、@MapperScan作用:指定…

    2022年5月5日
    89
  • power函数_power pivot函数

    power函数_power pivot函数#include<stdio.h>#include<math.h>//power函数doublepower(doublex,doubley);intmain(){ do

    2022年8月5日
    4
  • 使用 HTML、CSS 和 JS 创建在线音乐播放器(含免费完整源码)

    使用 HTML、CSS 和 JS 创建在线音乐播放器(含免费完整源码)直接跳到末尾获取完整源码今天我将带着大家使用HTML、CSS和JS创建音乐播放器,没有使用任何其他库。我们的音乐播放器具有三个部分。主屏幕、播放器部分和播放列表部分。我们的主页部分有一个平滑的工作滑块,也有水平滚动。这个音乐播放器最好的部分是它最小化了音乐播放器。是的,您可以最小化和最大化播放器本身。使这个项目成为一个很棒的音乐播放器。❤️使用HTML、CSS和JS创建在线音乐播放器❤️????在线演示地址????完整代码结构????home-section首页部分???

    2022年6月26日
    60

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号