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
版权声明:本文为博主原创文章,未经博主允许不得转载。 举报

相关文章推荐

android startActivityForResult 的简单使用

1、通常情况下我们利用startActivity() 这个方法来开启一个activity,这样做的结果是不能够从后一个activity 把值给传回来,利用startActivityForResult(...

android 利用startActivityForResult()方法得到另一个Activity的返回值

第一个Activity package yyy.testandroid5; import android.app.Activity; import android.content.Compo...

精选:深入理解 Docker 内部原理及网络配置

网络绝对是任何系统的核心,对于容器而言也是如此。Docker 作为目前最火的轻量级容器技术,有很多令人称道的功能,如 Docker 的镜像管理。然而,Docker的网络一直以来都比较薄弱,所以我们有必要深入了解Docker的网络知识,以满足更高的网络需求。

android.app.Activity类中的startActivityForResult()方法、onActivityResult()方法、setResult()方法的使用

Intent负责对应用中一次操作的动作、动作涉及数据、附加数据进行描述,Android则根据此Intent的描述,负责找到对应的组件,将Intent传递给调用的组件,并完成组件的调用 Intent,...

startActivityForResult使用示例

startActivityForResult使用示例

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

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

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

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

putty详细使用说明

在windows下操作linux命令的小工具,非常好。偶然发现,储存资料备用。 PuTTY 是一个跨平台的远程登录工具,包含了一组程序,包括: PuTTY (Telnet 和 SSH 客户端)...

EXPDP和IMPDP的比较详细使用说明

本打算自己写一篇关于data pump的blog,然后发现此文真的不错,就转载一下喽。http://space.itpub.net/11417069/viewspace-683740 ORCALE1...
  • e_wsq
  • e_wsq
  • 2012-02-09 16:43
  • 228

uploadify多图片上传详细使用说明

1.在过去一年,小编写过一个批量上传图片的例子,那个例子是基于百度编辑器改造的,用起来必须依赖百度编辑器,所以小编就又弄了一个,就是今天要介绍的了,uploadify上传的了前端用flash,java...

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

本文博客地址:http://blog.csdn.net/qq1084283172/article/details/66971242 一、binwalk工具的基本用法介绍 1.获取帮助信息 $ ...
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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