Android中基本Intent传值详解
- 缘由
- 使用Intent传值
- 在目标Acitivity里取值
- 进阶:使用startAcitivityForResult()获取返回值
- 1. 在A中设置请求:
- 2. 在B中设置要传回的数据:
- 3. 在A中接受从B传回的数据:
- 结尾
缘由
在项目中,需要将一个Activity中设置好的提醒时间返回给上一个页面并显示,因此需要用到Intent传值,而此前我的思路一直停留在:如何在另外一个Acitivity中获取另一个Acitivity的控件?
当我认识到,可以这么做,但是完全没必要,因为这样会使得Acitivity之间互相耦合,很容易出现内存泄漏。
使用Intent传值
使用Intent传值的作用,无非是传递你的意图,这个意图可以是:
- Acitivity跳转到指定的下一个Acitivity:
Intent intent = new Intent();
intent.setClass(this,NextAcitivity.class);
startAcitivity(intent);
- 从一个Acitivity把值传到另一个Acitivity:
Intent intent = new Intent();
intent.setClass(this,NextAcitivity.class);
intent.putExtra("key",value);
intent.putExtra(int,value);
...
- 通过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.
这只是刚刚开始,努力生存下来吧。