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 的作用

----------------------------------------------------------------------------------------------------...

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

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

Github上关于iOS的各种开源项目集合(强烈建议大家收藏,查看,总有一款你需要)

转载地址 下拉刷新 EGOTableViewPullRefresh - 最早的下拉刷新控件。SVPullToRefresh - 下拉刷新控件。MJRefresh - 仅需一行代码就可以为U...

常用iOS、Mac框架和库及常用中文开发博客

目录 UI 下拉刷新模糊效果AutoLayout富文本图表表相关隐藏与显示HUD与Toast对话框其他UI 动画 侧滑与右滑返回手势其他动画 网络相关 网络连接网络测试图像...

Android------startActivityForResult的详细用法--返回数据

本文转载自:http://blog.csdn.net/sunchaoenter/article/details/6612039 在启动另外一个Activity的时候,有两种方法,一种是直接使...

关于Android中startActivityForResult()方法的详细使用

前提条件,Activity的之间的调用关系:A --> B,即Activity A启动了Activity B      在A中启动B的代码:startActivityForResult(new Int...
  • xu_lu
  • xu_lu
  • 2011年10月13日 08:55
  • 1092

Apache Rewrite详细配置与使用说明

1、Rewrite简介         Rewirte主要的功能就是实现URL的跳转,隐藏URL真实地址,可以帮组我们实现拟静态,拟目录,域名跳转,防止盗链,搜索引擎得收录等。Rewirte配置...

STM32——USB详细使用说明 附件HID的双向通信(一)

说明:使用的是STM32F103ZET6 硬件原理图 在开始枚举设备的一些初始化 void bsp_USBInit(void) {     GPIO_InitTypeDef  GPIO_...

MyEclipse 详细使用说明!

学习编程开发是件需要持之以恒的是,大家加油好好努力,早日成为变成精英。 第一部分MyEclipse的基本使用 一.提示:MyEclipse的透视图按钮:可以切换不同的透视图(位于右上角) 1.建...

路由器逆向分析------binwalk工具的详细使用说明

本文博客地址:http://blog.csdn.net/qq1084283172/article/details/66971242 一、binwalk工具的基本用法介绍 1.获取帮助信息 $ ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:startActivityForResult的详细用法及详细使用说明
举报原因:
原因补充:

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