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


先看下这三者的关系:

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
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值