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,关键 ...
随机推荐
- java编程思想-复用类总结
今天继续读<java 编程思想>,读到了复用类一章,看到总结写的很好,现贴上来,给大家分享. 继承和组合都能从现有类型生成新类型.组合一般是将现有类型作为新类型底层实现的一部分来加以复用, ...
- sql lock
要提升SQL的查询效能,一般来说大家会以建立索引(index)为第一考虑.其实除了index的建立之外,当我们在下SQL Command时,在语法中加一段WITH (NOLOCK)可以改善在线大量查询 ...
- kailli添加桌面快捷方式
kailli添加桌面快捷方式 /usr/share/applications/xxx.desktop 注意大小写要与Name对应 [Desktop Entry] Version=1.0 Name=Tu ...
- Ecshop商品促销时间精确到小时分钟和秒的设置方法 调用时间
第一步:找到admin/tempate/good_info.htm文件 把<input name="selbtn1" type="button" id=& ...
- setTimeout不断重复执行
setTimeout() 方法用于在指定的毫秒数后调用函数或计算表达式. setTimeout(code,millisec) code 必需.要调用的函数后要执行的 JavaScript 代码串. ...
- Brew Command Not Found
安装了brew后,居然找不到brew命令.于是uninstall后再次install,居然还是Brew Command Not Found. 解决办法: http://stackoverflow.co ...
- 修改美化Matlab字体
修改美化Matlab字体 MATLAB作为高校理工科类本科生或研究生必不可少的科研工具已经有着很多年的历史,以至于在我们的大学生活里或科研工作中,MATLAB处处闪现着它的身影,给我们带来了不少 ...
- Linux查看软件安装路径
Linux中查看某 个软件的安装路径(地址)有时显得非常重要.比如某个文件的快速启动项被删除,或者你要建立快速启动项,或者想删除. 添加安装文件等等,很多地方都要用到查案文件安装路径的命令. 这里给大 ...
- Java并发编程核心方法与框架-ExecutorService的使用
在ThreadPoolExecutor中使用ExecutorService中的方法 方法invokeAny()和invokeAll()具有阻塞特性 方法invokeAny()取得第一个完成任务的结果值 ...
- Linux关于添加硬盘的那些事儿:笔记
添加新硬盘:http://note.youdao.com/share/?id=8cf27602cdce36e1d4160f00e9004b00&type=note 关于添加硬盘的那些事儿: ...