[Android学习笔记]startActivityForResult和onActivityResult的使用
发开过程中,免不了多个页面之间相互交互通信。
Android中使用startActivityForResult方法和onActivityResult配合完成任务
startActivityForResult方法:
public void startActivityForResult (Intent intent, int requestCode)
public void startActivityForResult (Intent intent, int requestCode, Bundle options)
intent对象:
启动目标Activity,传递数据
requestCode码:
如果此值大于等于0,将会在当前Activity的onActivityResult方法中作为判断回传的子Activity的依据
onActivityResult 方法:
protected void onActivityResult (int requestCode, int resultCode, Intent data)
requestCode请求码:作为判断回传的子Activity的依据
resultCode结果码:子Activity的操作结果表示
intent对象:子Activity数据载体
使用步骤:
1.父Activity中重写onActivityResult方法
2.使用startActivityForResult启动子Activity
Ex:
1.MainActivity
Button btn = (Button)findViewById(R.id.btnGotoSecondActivity);
btn.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View arg0)
{
// TODO Auto-generated method stub // 设置传递的数据
Intent intent = new Intent(arg0.getContext(),SecondActivity.class);
Bundle bundle = new Bundle();
bundle.putString("data", "hello third activty");
intent.putExtra("data", bundle); // 设置请求码
startActivityForResult(intent, SecondActivityRequestCode);
}
}); Button btnThird = (Button)findViewById(R.id.btnGotoThirdActivity);
btnThird.setOnClickListener(new View.OnClickListener()
{ @Override
public void onClick(View arg0)
{
// TODO Auto-generated method stub // 设置传递的数据
Intent intent = new Intent(arg0.getContext(),ThirdActivity.class);
Bundle bundle = new Bundle();
bundle.putString("data", "hello third activty");
intent.putExtra("data", bundle); // 设置请求码
startActivityForResult(intent, ThirdActivityRequestCode);
}
});
MainActivity
2.onActivityResult
/* requestCode:请求码
* 用于标识回传的子Activity,根据此值判断是从哪一个子Activity返回的,它与startActivityForResult方法中的requestCode对应
*
* resultCode:结果码
* 是子Activity的一个结果标识,一般在子Activity中定义,子Activity操作结束之后,使用setResult方法设置子Activity的结果状态
* 父Activity根据此结果码判断为对应的Activity做不同的处理
*
* example:
* if(requestCode == secondActivityRequestCode)
* {
* if(resultCode == SecondActivityResultCodeSuccess)
* {
* // do success
* }
* else if(resultCode == SecondActivityResultCodeFail)
* {
* // do fail
* }
* }
*
* data:Intent对象
* 子Activity的Intent对象,从此对象中获取Bundle载体,获取子Activity传递的数据
*
* @see android.app.Activity#onActivityResult(int, int, android.content.Intent)
*/
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data)
{
// TODO Auto-generated method stub
super.onActivityResult(requestCode, resultCode, data); // 从SecondActivity返回
if(requestCode == SecondActivityRequestCode)
{
Intent intent = data;
Bundle bundle = intent.getExtras(); // 如果SecondActivity操作成功
if(SecondActivity.SecondActivityResultCode1 == resultCode)
{
String dataString = bundle.getString("data");
Toast.makeText(this, "get data from SecondActivity" + SecondActivity.SecondActivityResultCode1,Toast.LENGTH_SHORT).show();
}
else if(SecondActivity.SecondActivityResultCode2 == resultCode) // 如果SecondActivity操作失败
{
String dataString = bundle.getString("data");
Toast.makeText(this, "get data from SecondActivity" + SecondActivity.SecondActivityResultCode2,Toast.LENGTH_SHORT).show();
}
}
else if(requestCode == ThirdActivityRequestCode) //从ThirdActivity返回
{
Intent intent = data;
Bundle bundle = intent.getExtras();
String dataString = bundle.getString("data"); Toast.makeText(this, "get data from ThirdActivity :" + dataString,Toast.LENGTH_SHORT).show();
}
}
onActivityResult
3.SecondActivity
@Override
public boolean onKeyDown(int keyCode, KeyEvent event)
{
// TODO Auto-generated method stub
// return super.onKeyDown(keyCode, event);
// 如果是物理返回按键
if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0)
{
// 获取Intent
Intent itent = this.getIntent(); // 创建Bundle对象,设置需要回传的数据
Bundle bundler = new Bundle();
bundler.putString("data", "i ' m come from SecondActivity"); // 为Intent设置数据载体Bundle
itent.putExtras(bundler); // 设置结果
// this.setResult(SecondActivityResultCode1, itent);
this.setResult(SecondActivityResultCode2, itent); // 结束当前Activity
this.finish(); return false;
} else
// 如果不是物理返回按键则正常响应
{
return super.onKeyDown(keyCode, event);
}
}
SecondActivity
[Android学习笔记]startActivityForResult和onActivityResult的使用的更多相关文章
- Android学习 之 startActivityForResult 和 onActivityResult
startActivityForResult 和 onActivityResult() 作用:主要用于 主Activity向调用的 子Activity 获得数据. 使用方法:在 主Activity写 ...
- 【转】Pro Android学习笔记(十二):了解Intent(下)
解析Intent,寻找匹配Activity 如果给出component名字(包名.类名)是explicit intent,否则是implicit intent.对于explicit intent,关键 ...
- Pro Android学习笔记(一三七):Home Screen Widgets(3):配置Activity
文章转载仅仅能用于非商业性质,且不能带有虚拟货币.积分.注冊等附加条件.转载须注明出处http://blog.csdn.net/flowingflying/以及作者@恺风Wei. 通过widget定义 ...
- Android学习笔记:Home Screen Widgets(2):关于Widget
通过widget定义,我们在widget列表中看到了我们的TestWidget.当我们拖拽widget到主页时,假设在appwidet-provider中定义了android:configure的ja ...
- Android 学习笔记之Volley(七)实现Json数据加载和解析...
学习内容: 1.使用Volley实现异步加载Json数据... Volley的第二大请求就是通过发送请求异步实现Json数据信息的加载,加载Json数据有两种方式,一种是通过获取Json对象,然后 ...
- Android学习笔记进阶之在图片上涂鸦(能清屏)
Android学习笔记进阶之在图片上涂鸦(能清屏) 2013-11-19 10:52 117人阅读 评论(0) 收藏 举报 HandWritingActivity.java package xiaos ...
- android学习笔记36——使用原始XML文件
XML文件 android中使用XML文件,需要开发者手动创建res/xml文件夹. 实例如下: book.xml==> <?xml version="1.0" enc ...
- Android学习笔记之JSON数据解析
转载:Android学习笔记44:JSON数据解析 JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,采用完全独立于语言的文本格式,为Web应用开发提供了一种 ...
- udacity android 学习笔记: lesson 4 part b
udacity android 学习笔记: lesson 4 part b 作者:干货店打杂的 /titer1 /Archimedes 出处:https://code.csdn.net/titer1 ...
随机推荐
- CCIE路由实验(8) -- QoS
1.查看端口缺省的队列机制2.配置CB-WFQ3.配置CB-LLQ4.配置CB-Shapping在以太接口下5.配置CB-Shapping在FR接口下6.配置帧中继流量整形FRTS7.配置CB-Pol ...
- codeforces 264D Colorful Stones
题目 题目来自于rng_58Orz. 算法 讨论某个状态\((x,y)\)是否可达,\(x\)是狐狸到达的石头,\(y\)是猫的. 题解说,如果满足以下条件,那么它就是可到达状态: \(t[0..y] ...
- JavaScript提高:005:ASP.NET使用easyUI TABS标签显示问题
前面使用easy ui来实现了一个tabs标签(http://blog.csdn.net/yysyangyangyangshan/article/details/38307477),只是在ASP.NE ...
- SVN库迁移
最后库迁移.机会主义的,在源库资源,然后上传到目标库,最后client更新url地址.的库被组长一眼识破,由于新库中没有大家的操作日志. 这次吸取上次的教训,用dump和load完毕SVN库迁移. 整 ...
- [ACM] hdu 1251 统计难题 (字典树)
统计难题 Problem Description Ignatius近期遇到一个难题,老师交给他非常多单词(仅仅有小写字母组成,不会有反复的单词出现),如今老师要他统计出以某个字符串为前缀的单词数量(单 ...
- 终于懂了:WM_PAINT中应该用BeginPaint与EndPaint这两个api,它们的功能正是使无效区域恢复(所以WM_PAINT里即使什么都不做,也必须写上BeginPaint与EndPaint)——Delphi里WM_PAINT消息的三个走向都做到了这一点 good
程序本来是想实现鼠标单击改变背景颜色.可是,程序运行时,为什么没有任何消息触发,背景颜色就一直不断的改变了?WM_PAINT怎么被触发的 #include <windows.h> #inc ...
- 大白痴学习webmagic
摘要 webmagic 学习 从头 刚刚开始学,很多东西可能理解错了,还请各位指教 一些基本类: Request:包含要爬行的url和一些附加信息,是Page的一个成员变量 主要成员变量 String ...
- 【linux】内核+文件系统下载到开发板
K开发 欢迎转载,转载时请保留作者信息,谢谢. 邮箱:tangzhongp@163.com 博客园地址:http://www.cnblogs.com/embedded-tzp Csdn博客地址:htt ...
- Java多线程-实例解析
Java多线程实例 3种实现方法Java中的多线程有三种实现方式:1.继承Thread类,重写run方法.Thread本质上也是一个实现了Runnable的实例,他代表一个线程的实例,并且启动线程的唯 ...
- 14.10.3 InnoDB Checkpoints InnoDB 检查点:
14.10.3 InnoDB Checkpoints InnoDB 检查点: 你的log files 变的很大可能会降低磁盘性能在checkpointing的时候, 它通常设置设置log files总 ...