startActivityForResult的详细用法及详细使用说明

原创 2016年08月29日 10:55:12


先看下这三者的关系:

Activity_A通过startActivityForResult()去启动了Activity_B,

Activity_B在自己finish()之前可以通过setResult()方法传递一个参数给Activity_A

Activity_A可以通过复写onActivityResult()方法来拿到回传值


启动另外一个Activity有两种方法:

1、startActivity()主要作用就是启动acitivty,不可以回传数据。
2、startActivityForResult()主要作用也是
启动acitivty,不同的就是它可以回传数据。

当activity关闭后,如果有返回值,则会在这个onActivityResult方法内接收。

��栗子来咯
Activity_A
package test.ban.com.teststartactivityforresultactivity;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

public class Activity_A extends Activity implements
        View.OnClickListener {
    private TextView mText01;
    private TextView mText02;
    private Button button01;
    private Button button02;
    private Intent mIntent;
    private int requestCode;

    /**
     * Called when the activity is first created.
     */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mText01 = (TextView) findViewById(R.id.mText01);
        mText02 = (TextView) findViewById(R.id.mText02);
        button01 = (Button) findViewById(R.id.mButton01);
        button02 = (Button) findViewById(R.id.mButton02);
        button01.setOnClickListener(this);
        button02.setOnClickListener(this);
        mText01.setText("第一条数据");
        mText02.setText("第二条数据");

        mIntent = new Intent();
        //参数一为当前Package的context,当前Activity的context就是this,其他Package可能用到createPackageContex()
        //参数二为你要打开的Activity的类名
        mIntent.setClass(Activity_A.this, Activity_B.class);
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.mButton01:
                // 请求码requestCode的值随便设置,但必须>=0
                requestCode = 0;
                /**
                 * 跳转的时候不是采用startActivity(intent) 这个方法,而是startActivityForResult(intent, 0)
                 */
                startActivityForResult(mIntent, requestCode);
                break;
            case R.id.mButton02:
                requestCode = 2;
                /**
                 * 跳转的时候不是采用startActivity(intent) 这个方法,而是startActivityForResult(intent, 0)
                 */
                startActivityForResult(mIntent, requestCode);
                break;
            default:
                break;
        }
    }

    /**
     * 重写onActivityResult方法,用来接收Activity_B回传的数据。
     * <p>
     * 回调方法,从Activity_B页面回来的时候会执行这个方法
     */
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        //data为Activity_B中回传的Intent
        //change01、change02即为回传的值
        String change01 = data.getStringExtra("change01");
        String change02 = data.getStringExtra("change02");
        // 根据上面发送过去的请求吗来区别
        switch (requestCode) {//resultCode为回传的标记,我在B中回传的是resultCode
            case 0:
                mText01.setText(change01);
                new Handler().postDelayed(new Runnable() {
                    @Override
                    public void run() {
                        mText01.setText("1000");
                    }
                }, 1000);
                break;
            case 2:
                mText02.setText(change02);
                break;
            default:
                break;
        }
    }
}
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:orientation="vertical"
              android:layout_width="fill_parent"
              android:layout_height="fill_parent"
    >
    <TextView
        android:id="@+id/mText01"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        />
    <TextView
        android:id="@+id/mText02"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        />
    <Button
        android:id="@+id/mButton01"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="改变第一行文本的值"
        />
    <Button
        android:id="@+id/mButton02"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="改变第二行文本的值"
        />
</LinearLayout>

Activity_B
package test.ban.com.teststartactivityforresultactivity;/**
 * Created by apple on 16/8/29.
 */

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;

/**
 * 作者:ban on 16/8/29 09:44
 */
public class Activity_B extends Activity {
    private int resultCode = 0;

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

        //数据是使用Intent返回
        Intent mIntent = new Intent();

        //把返回数据存入Intent
        mIntent.putExtra("change01", "第一条数据改为:1000");
        mIntent.putExtra("change02", "第二条数据改为:2000");

        //设置返回数据
        //在Activity_B中回传数据时采用setResult方法,并且之后要调用finish方法。
        //mIntent为Activity_A传来的带有Bundle的intent,当然也可以自己定义新的Bundle
        this.setResult(resultCode, mIntent);
        // this.finish();
    }

}

activity_main2.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:layout_width="fill_parent"
              android:layout_height="fill_parent"
              android:orientation="vertical">

    <TextView
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="文本的值已经改变"
        />
    
</LinearLayout>  

源码地址:http://download.csdn.net/detail/u010566681/9615617
版权声明:本文为博主原创文章,未经博主允许不得转载。

startActivityForResult() 中requestCode 和 resultCode 的作用

----------------------------------------------------------------------------------------------------...
  • donglynn
  • donglynn
  • 2014年03月31日 21:22
  • 28324

startActivityForResult和setResult详解

startActivityForResult与startActivity的不同之处在于: 1、startActivity( )  仅仅是跳转到目标页面,若是想跳回当前页面,则必须再使用一次star...
  • qq_35253767
  • qq_35253767
  • 2016年09月27日 13:48
  • 1474

startActivityForResult用法详解 requestCode resultCode

http://www.cnblogs.com/linjiqin/archive/2011/06/03/2071956.html 一、如果想在Activity中得到新打开Activity...
  • u010477502
  • u010477502
  • 2015年10月21日 15:33
  • 2899

startActivityForResult的用法,及requestCode、resultCode建议使用情况

startActivityForResult的用法
  • u014620028
  • u014620028
  • 2016年10月14日 11:48
  • 286

关于startActivityForResult()方法后Activity直接退出的问题原因和解决办法

现象: 今天在做调用相机拍照然后进行一些裁剪后显示的Demo。大题思路就是这样 private final View.OnClickListener onClickListener = new ...
  • u013224148
  • u013224148
  • 2015年05月14日 16:04
  • 5956

activity中 调用startActivityForResult的步骤及生命周期

说明:一个activity需要另一个activity返回结果给其的时候,可以使用startActivityForResult方法 现在有两个activity,分别为ForResultActivity和...
  • u010962131
  • u010962131
  • 2015年08月03日 10:19
  • 3177

startActivityForResult的用法和demo

转载自:http://b275518834201204034558.iteye.com/blog/1514563 有时候我们需要把A activity提交数据给B  activi...
  • heikefangxian23
  • heikefangxian23
  • 2016年09月19日 11:50
  • 319

(转)Android startActivityForResult 请求码requestCode 及结果码resultCode 详解及运用

原地址:http://blog.csdn.net/ngl272/article/details/38298961 * requestCode 请求码,即调用startActivityForRe...
  • duyiqun
  • duyiqun
  • 2017年03月20日 23:00
  • 828

activity中 调用startActivityForResult的步骤及生命周期

说明:一个activity需要另一个activity返回结果给其的时候,可以使用startActivityForResult方法 现在有两个activity,分别为ForResultActivity和...
  • u010962131
  • u010962131
  • 2015年08月03日 10:19
  • 3177

关于startActivityForResult你可能不知道的

作为一名Android开发人员
  • jspz11111
  • jspz11111
  • 2014年07月26日 18:20
  • 1157
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:startActivityForResult的详细用法及详细使用说明
举报原因:
原因补充:

(最多只允许输入30个字)