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

作者: 大话程序 | 来源:发表于2016-05-05 20:44 被阅读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");  //通过键取值
    

    返回数据给上一个活动


    • 通过调用finish()方法返回上一个活动
    • 通过按下back键来返回上一个活动

    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();
        }
    

    相关文章

      网友评论

        本文标题:使用功能Intent在活动之间传递数据

        本文链接:https://www.haomeiwen.com/subject/bwbdrttx.html