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,关键 ...
随机推荐
- Distinct
SELECT 指令让我们能够读取表格中一个或数个栏位的所有资料.这将把所有的资料都抓出,无论资料值有无重复.在资料处理中,我们会经常碰到需要找出表格内的不同资料值的情况.换句话说,我们需要知道这个表格 ...
- EasyUI-Datagrid 中formatter和group-formatter的使用
1.在表格属性设置函数那块写以下内容: groupFormatter:function(value,rows){ //这里可以看到每一条导入表格中的数据,可以返回group的总结值 }, column ...
- 自然语言14_Stemming words with NLTK
https://www.pythonprogramming.net/stemming-nltk-tutorial/?completed=/stop-words-nltk-tutorial/ # -*- ...
- 20145212 《Java程序设计》第8周学习总结
20145212 <Java程序设计>第8周学习总结 教材学习内容总结 第十四章 NIO与NIO2 认识NIO NIO使用频道(Channel)来衔接数据节点,在处理数据时,NIO可以让你 ...
- Java——private default protected public访问控制权限
访问控制权限 protected范例
- 重载new操作符
http://book.51cto.com/art/201202/317799.htm
- EF批量插入 扩展
https://efbulkinsert.codeplex.com/ https://github.com/loresoft/EntityFramework.Extended
- VC亲自教你写BP
2015年5月24日下午,腾讯开放平台“创业ABC”沙龙在腾讯众创空间(上海)举行.活动以“创业融资实战——从计划书到如何估值到如何花钱”为主题,险峰华兴投资负责人徐建海先生现场分享<如何写BP ...
- yii2 funson86\yii2-setting
Yii2 Setting for other application, especially for Yii2 Adminlte Installation The preferred way to i ...
- Yii2提交表单提示无法验证
yii2使用gii生成的搜索视图里的表单使用的是get方式,我改为post就提示无法验证,以为是控制器默认访问是get,实际默认是get和post都可以 public function behavio ...