Android中基本Intent传值详解

  • 缘由
  • 使用Intent传值
  • 在目标Acitivity里取值
  • 进阶:使用startAcitivityForResult()获取返回值
  • 1. 在A中设置请求:
  • 2. 在B中设置要传回的数据:
  • 3. 在A中接受从B传回的数据:
  • 结尾


缘由

在项目中,需要将一个Activity中设置好的提醒时间返回给上一个页面并显示,因此需要用到Intent传值,而此前我的思路一直停留在:如何在另外一个Acitivity中获取另一个Acitivity的控件?

当我认识到,可以这么做,但是完全没必要,因为这样会使得Acitivity之间互相耦合,很容易出现内存泄漏。

使用Intent传值

使用Intent传值的作用,无非是传递你的意图,这个意图可以是:

  1. Acitivity跳转到指定的下一个Acitivity:
Intent intent = new Intent();
intent.setClass(this,NextAcitivity.class);
startAcitivity(intent);
  1. 从一个Acitivity把值传到另一个Acitivity:
Intent intent = new Intent();
intent.setClass(this,NextAcitivity.class);
intent.putExtra("key",value);
intent.putExtra(int,value);
...
  1. 通过Bundle进行传值:
Intent intent = new Intent();
intent.setClass(this,NextAcitivity.class);
Bundle bundle = new Bundle();
bundle.putString("key",value);
intent.putExtras(bundle);
startAcitivity(intent);

在目标Acitivity里取值

String value = getAcitivity().getIntent().getExtras("key");
//这里的getAcitivity()是为了获取当前Acitivity的对象

进阶:使用startAcitivityForResult()获取返回值

startAcitivityForResult()方法用于获取从一个Acitivity出去的另一个Acitivity的返回值

例如:从列表页面A打开编辑页面B,在页面B中完成了内容编辑,需要把B中内容的标题返回给页面A,并显示在A的列表清单里。

这里通过startAcitivityForResult()方法就可以完成。

1. 在A中设置请求:

Intent intent = new Intent();
intent.setClass(A-Acitivity,B-Acitivity);
//A-Acitivity,B-Acitivity是错误写法,只是为了读者能明白意图。
startAcitivityForResult(intent, requestCode);
//requestCode是请求识别码
//具体的作用就是在后面的onActivityResult()回调方法里作为识别和判断标识使用
//后面有具体例子说明

2. 在B中设置要传回的数据:

Intent intent = new Intent();
Bundle bundle = new Bundle();
bundle.putString("key",value);
... //放你的数据
intent.putExtras(bundle);
getActivity().setResult(RESULT_OK, intent);//RESULT_OK是resultCode的值
finish();

要注意这里的setResult()方法,这里用来存放resultCode结果码和要传递的数据intent,这里的结果码resultCode跟之前提到的requestCode的作用是类似的。

3. 在A中接受从B传回的数据:

重写onActivityResult()回调方法:

@Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {

        if (resultCode == RESULT_OK){
            String value = data.getExtras().getString("key");
            ...//接受到这个数据以后,把数据在A中使用吧!
        }
    }

结尾

漫长的爬坑之路,多看多写,多学习。

Winter of Internet is coming.

这只是刚刚开始,努力生存下来吧。