Android学习笔记(四)——再探Intent
//此系列博文是《第一行Android代码》的学习笔记,如有错漏,欢迎指正!
我们可以使用 Intent 来启动一个活动, 还可以在启动活动的时候传递数据的,下面一起来看一下:
一、向下一个活动传递数据
Intent中提供了一系列 putExtra()方法的重载,可以把我们想要传递的数据暂存在 Intent 中,启动了另一个活动后,只需要把这些数据再从Intent 中取出就可以了。例如我们可以在mainactivity中创建一个字符串,然后把它传递到second_activity里:
1)先在MainActivity中构建好Intent:
@Override
public void onClick(View v) {
String data = "Hello second_activity";
Intent intent = new Intent(MainActivity.this, second_activity.class);
intent.putExtra("extra_data", data);
startActivity(intent);
}
我们使用显式 Intent的方式来启动 second_activity,并通过 putExtra()方法传递了一个字符串。注意这里 putExtra()方法接收两个参数,第一个参数是键名,用于后面从 Intent中取值,第二个参数才是真正要传递的数据。
2)在second_activity中将intent的数据提取出来:
public class second_activity extends Activity { @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.secend);
Intent intent = getIntent();
String data = intent.getStringExtra("extra_data");
Log.d("SecondActivity", data);
} }
这里我们通过 getIntent()方法获取到用于启动 second_activity 的 Intent,然后调用getStringExtra()方法,传入相应的键值,就可以得到传递的数据了。这里由于我们传递的是字符串,所以使用 getStringExtra()方法来获取传递的数据,如果传递的是整型数据,则使用getIntExtra()方法,传递的是布尔型数据,则使用 getBooleanExtra()方法,以此类推。
此时启动程序,运行效果如下:
按下button 1后可看到logcat中将传入的字符串打印出来了:
aaarticlea/png;base64,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" alt="" />
二、将数据返回给上一个活动
Activity中有一个 startActivityForResult()方法也是用于启动活动的, 这个方法在活动销毁的时候能够返回一个结果给上一个活动。我们可以在这里使用它:
1)修改MainActivity中的onClick()方法:
button1.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(MainActivity.this, second_activity.class);
startActivityForResult(intent, 1);
}
});
这里我们使用了 startActivityForResult()方法来启动 second_activity,请求码只要是一个唯一值就可以了,这里传入了 1即可。
2)在second_activity中注册一个button 2,添加返回数据的逻辑:
public class second_activity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.second); Button button2 = (Button) findViewById(R.id.button_2);
button2.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent();
intent.putExtra("data_return", "Hello MainActivity");
setResult(RESULT_OK, intent);
finish();
}
});
}
}
我们构建了一个 Intent,只不过这个 Intent 仅仅是用于传递数据而已,它没有指定任何的“意图” 。紧接着把要传递的数据存放在 Intent 中,然后调用了 setResult()方法。这个方法是专门用于向上一个活动返回数据的。setResult()方法接收两个参数,第一个参数用于向上一个活动返回处理结果,一般只使用 RESULT_OK 或RESULT_CANCELED 这两个值,第二个参数则是把带有数据的 Intent 传递回去,然后调用
了 finish()方法来销毁当前活动。
3)重写主活动的onActivityResult()方法:
由于我们是使用 startActivityForResult()方法来启动 second_activity的, 在 second_activity被销毁之后会回调上一个活动的 onActivityResult()方法,因此我们需要在 MainActivity 中重写这个方法来得到返回的数据:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
switch (requestCode) {
case 1:
if (resultCode == RESULT_OK) {
String returnedData = data.getStringExtra("data_return");
Log.d("MainActivity", returnedData);
}
break;
default:
}
}
onActivityResult()方法带有三个参数,第一个参数 requestCode,即我们在启动活动时传入的请求码。 第二个参数 resultCode, 即我们在返回数据时传入的处理结果。 第三个参数 data,即携带着返回数据的 Intent。
因为一个主活动可能调用startActivityForResult()方法去启动很多不同的活动,每一个活动返回的数据都会回调到 onActivityResult()这个方法中。所以我们需要先判断requestCode(请求码)来确定活动的来源,在通过resultCode来判断活动执行的情况。
三、在按下back键时传回数据
在上面的例子中我们是通过按下button 2 来返回数据的,假如想通过按下back键来传递数据呢?这是我们可以通过重写second_activity中的 onBackPressed()方法:
@Override
public void onBackPressed() {
Intent intent = new Intent();
intent.putExtra("data_return", "Hello FirstActivity");
setResult(RESULT_OK, intent);
finish();
}
//End.
Android学习笔记(四)——再探Intent的更多相关文章
- Android学习笔记(十一) Intent
一.Intent对象的基本概念 -Intent是Android应用程序组件之一 -Intent对象在Android系统当中表示一种意图 -Intent当中最重要的内容是action与data 二.In ...
- Android学习笔记四十Preference使用
Preference直译为偏好,博友建议翻译为首选项.一些配置数据,一些我们上次点击选择的内容,我们希望在下次应用调起的时候依旧有效,无须用户再一次进行配置或选择.Android提供preferenc ...
- Android 学习笔记四:创建工具栏按钮
原文:http://blog.csdn.net/lihongxun945/article/details/48951199 前面我们已经可以在一个Activity中添加一些按钮之类的组件.由于手机的屏 ...
- Android学习笔记三:用Intent串联activity
转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/7513399.html 一:Intent Intent可以理解为 意图. 我们可以通过创建intent实例来定义 ...
- Android学习笔记四:activity的四种启动模式
Activity有四种启动模式:standard,singleTop,singleTask,singleInstance. 1.standard:标准启动模式 默认模式,这个模式下启动的Activit ...
- android 学习笔记四:控件
1.android:gravity 指定控件的基本位置,比如居中.居右等位置 Top:顶部 bottom:底部 left:居左 right:居右 center_vertical:垂直居中 center ...
- android学习笔记四
TextView.Button.CheckBox.RadoiButton.EditView.ImageButton.ToogleButton——略 AnalogClock.DigitalClock = ...
- 【转】 Pro Android学习笔记(七四):HTTP服务(8):使用后台线程AsyncTask
目录(?)[-] 5秒超时异常 AsyncTask 实现AsyncTask抽象类 对AsyncTask的调用 在哪里运行 其他重要method 文章转载只能用于非商业性质,且不能带有虚拟货币.积分.注 ...
- 【转】 Pro Android学习笔记(四十):Fragment(5):适应不同屏幕或排版
目录(?)[-] 设置横排和竖排的不同排版风格 改写代码 对于fragment,经常涉及不同屏幕尺寸和不同的排版风格.我们在基础小例子上做一下改动,在横排的时候,仍是现实左右两个fragment,在竖 ...
- 【转】Pro Android学习笔记(十二):了解Intent(下)
解析Intent,寻找匹配Activity 如果给出component名字(包名.类名)是explicit intent,否则是implicit intent.对于explicit intent,关键 ...
随机推荐
- 【原】gulp快速入门
今天刚入职了一家新公司,结果明天就要开始项目了.上级说要用gulp来打包代码,所以今晚花了一晚来看这个gulp, 可以说已经入门了.所以做一个小小的总结 : 首先全局安装gulp npm instal ...
- 怎样用命令行编译C#程序
1. 把程序拷贝至记事本 2.另存为*cs格式 3.找到VS2015提供的命令提示 4.要把命令行指向程序所在的目录(可以有个小软件) 如果在其他的盘符,先敲D:,然后再cd 5.输入csc hell ...
- ClassLoader 详解及用途(写的不错)
ClassLoader主要对类的请求提供服务,当JVM需要某类时,它根据名称向ClassLoader要求这个类,然后由ClassLoader返回 这个类的class对象. 1.1 几个相关概念Clas ...
- PHPCMS修改管理栏目下的模版设置的注意
要确保文件名后缀的统一才能被后台所找到 首页的必须是index开头.html结尾栏目首页的模板必须category开头.html结尾 -------例如导航栏上面的栏目页面 列表页的模板必须list开 ...
- Runner站立会议08
会议时间:2016.4.27 21.10~21.25 地点:基教负一层 今天:看日历的代码,网上下的,没有注释 明天:继续看代码 困难:代码看不懂 会议照片: 燃尽图:
- 几个有用的jQuery代码片段
1.检测Internet Explorer版本 $(document).ready(function() { if (navigator.userAgent.match(/msie/i) ){ ale ...
- Linux环境下常用软件(个人笔记编辑更改中)
近期使用CentOS,就在这里记录一下.首先,个人版本是CentOS6.5,属于centos系列,Fedora系列的理论上也可以用. 工欲善其事,必先利其器,这里介绍我的软件包配置: 1.vim(增强 ...
- mysql 查询表结构 查询索引
首先进入到mysql里 show databases; 选择数据库 use xxxcms; 查询数据库下的表结构 show create table 表名; 这样看着不太好可以后面加\G show c ...
- cookie, localStorage, sessionStorage区别
cookie 有过期时间,默认是关闭浏览器后失效,4K,兼容ie6,不可跨域,子域名会继承父域名的cookielocalStorage 永不过期,除非手动删除,5M,兼容IE8,不可跨域,子域名不能继 ...
- Python开发【第十四篇】:Web框架本质
Web框架本质 众所周知,对于所有的Web应用,本质上其实就是一个socket服务端,用户的浏览器其实就是一个socket客户端. ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 ...