Android基础之intent传值的三种方法

来源:互联网 发布:域名重定向设置 编辑:程序博客网 时间:2024/06/06 02:00

0 概述:Android之intent传值的三种方法

0.1 startActivity();
0.2 startActivityForResult();
0.3 调用在下个activity自定义的方法”actionStart()”,也就是最佳的方法。

1 最常用传值跳转:startActivity()方法

1.1 MainActivity

/* 在MainActivity中定义如下代码 */button1.setOnClickListener(new OnClickListener() {    @Override    public void onClick(View v) {            Intent intent = new             Intent(MainActivity.this,TwoActivity.class);            //在Intent对象当中添加一个键值对            intent.putExtra("key","value");                             startActivity(intent);    }});

1.2 TwoActivity

/* 在TwoActivity中定义如下代码 */public class TwoActivity extends Activity {    @Override    protected void onCreate(Bundle savedInstanceState) {        button2.setOnClickListener(new OnClickListener() {            @Override            public void onClick(View v) {                //取得从上一个Activity当中传递过来的Intent对象                Intent intent = getIntent();                //从Intent当中根据key取得value                if (intent != null) {                    String value = intent.getStringExtra("key");                }            }        });    }}

2 回调数据式传值跳转:startActivityForResult()方法

2.1 MainActivity

button1.setOnClickListener(new OnClickListener() {    @Override    public void onClick(View v) {             Intent intent = new Intent(MainActivity.this,TwoActivity.class);             intent.putExtra("key", "value");             // 第二个参数是请求码,只要是一个唯一值             startActivityForResult(intent, 1234);    }}); // 由于我们是使用startActivityForResult()方法来启动TwoActivity的,在TwoActivity被销毁之后会回调上一个活动的onActivityResult()方法    @Override    protected void onActivityResult(int requestCode, int resultCode, Intent intent) {        switch (requestCode) {            case 1234:                if (resultCode == RESULT_OK) {                    //接收对象                    //Bundle bundle = data.getExtras();                    //AddressBean addressBean = (AddressBean) bundle.getSerializable(Constant.ADDRESSBEAN);                    String returnedData = intent.getStringExtra("key1");                }                break;            default:        }    }

2.2 TwoActivity

public class TwoActivity extends Activity {    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        //接收从MainaActivity传递的数据        Intent intent = getIntent();        if (intent != null) {            String value = intent.getStringExtra("key");        }        button2.setOnClickListener(new OnClickListener() {            @Override            public void onClick(View v) {                //传递对象                //Intent intent = new Intent();                //Bundle bundle = new Bundle();                //bundle.putSerializable(Constant.ADDRESSBEAN, addressArray.get(position));                //intent.putExtras(bundle);                //setResult(RESULT_OK, intent);                //finish();                Intent intent = new Intent();                intent.putExtra("key1","value two activity");                // 专门用于向上一个活动返回数据。第一个参数用于向上一个活动返回结果码,一般只使用RESULT_OK或RESULT_CANCELED这两个值                setResult(RESULT_OK, intent);                finish();            }        });    }}

3 启动活动的最佳写法

3.0 问题描述

在真正的项目开发中经常会有对接的问题出现。如:TwoActivity并不是由你开发的,但现在你负责的部分需要有启动TwoActivity这个功能,而你却不清楚启动这个活动需要传递哪些数据。

3.1 MainActivity

button1.setOnClickListener(new OnClickListener() {    @Override    public void onClick(View v) {            /*最佳数据传值方法:调用在下个activity自定义的方法*/            TwoActivity.actionStart(MainActivity.this, "data1", "data2");    }});

3.2 TwoActivity

public class TwoActivity extends Activity {    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);    }    /*最佳数据传值方法*/    public static void actionStart(Context context, String data1, String data2) {        Intent intent = new Intent(context, TwoActivity.class);        intent.putExtra("param1", data1);        intent.putExtra("param2", data2);        context.startActivity(intent);    }}

3.3 结论

实现后,所有TwoActivity中需要的数据都是通过actionStart()方法的参数传递过来的,然后把它们存储到Intent中,最后调用startActivity()方法启动TwoActivity。

1 0