首页投稿(暂停使用,暂停投稿)Android开发Android知识

使用功能Intent在活动之间传递数据

2016-05-05  本文已影响368人  大话程序

使用Intent在传递数据,可以理解为Intent内部有一个Map集合,通过键值对存储数据,然后再在另一个活动中从Intent对象中取出数据

向下一个活动传递数据


Intent对象中有一个重载方法:putExtra()方法,接收两个参数,第一个参数是,第二个参数是,第二个也就是要传递的数据.
存储数据的事例

Intent intent = new Intent(FirstActivity.this, SecondActivity.class);
intent.putExtra("extra_data", "Hello World");
startActivity(intent);

拿取数据的事例

Intent intent = getIntent();  //获取到启动该活动的Intent
String data = intent.getStringExtra("extra_data");  //通过键取值

返回数据给上一个活动


Activity中有一个方法startActivityForResult(),此方法也是用于启动活动的,但这个方法期望在活动销毁的时候能够返回一个结果给上一个活动。
开启一个活动并要求返回结果

int requestCode = 1;  //请求码
startActivityForResult(intent, requestCode);  //开启活动,并传递请求码

在启动的活动中,提供以下代码

Intent intent = new Intent();  //这个Intent对象的作用只是存储数据
intent.putExtra("data_return", "Hello World"); //Intent对象存储数据
setResult(RESULT_OK, intent); //此方法专门向上一个活动返回数据
finish(); //销毁此活动

setResult()方法接收两个参数,第一个参数用于向上一个活动返回处理结果,一般只是用RESULT_OKRESULT_CANCELED,第二个参数则是把带有数据的Intent传递回去。

当我们使用startActivityForResult()方法启动另一个活动时,当另一个活动被销毁之后会回调上一个活动的onActivityResult()方法
我们在上一个活动中重写onActivityResult()方法

    /**
     * requestCode:请求码,启动活动时传入的请求码
     * resultCode:处理结果,返回数据时传入的处理结果
     * data:携带返回数据的Intent对象
     */
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        switch (requestCode) {
        case 1:
            if (resultCode == RESULT_OK) {
                String returnedData = data.getStringExtra("data_return");
            }
            break;
        default:
            break;
        }
    }

为什么在启动活动时传入了请求码:由于在一个活动中有可能调用startActivityForResult()方法去启动很多不同的活动,每一个活动返回的数据都会回调onActivityResult()方法,因此我们首先做的是通过检查请求码requestCode的值来判断数据来源。

注意:当用户点击功能键back来销毁一个活动时,活动就会调用onBackPressed()方法,可以在此方法中添加代码是返回数据:

    @Override
    public void onBackPressed() {
        Intent intent = new Intent();
        intent.putExtra("data_return", "Hello World");
        setResult(RESULT_OK, intent);
        finish();
    }
上一篇下一篇

猜你喜欢

热点阅读