发开过程中,免不了多个页面之间相互交互通信。

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的使用的更多相关文章

  1. Android学习 之 startActivityForResult 和 onActivityResult

    startActivityForResult 和 onActivityResult() 作用:主要用于 主Activity向调用的 子Activity 获得数据. 使用方法:在 主Activity写 ...

  2. 【转】Pro Android学习笔记(十二):了解Intent(下)

    解析Intent,寻找匹配Activity 如果给出component名字(包名.类名)是explicit intent,否则是implicit intent.对于explicit intent,关键 ...

  3. Pro Android学习笔记(一三七):Home Screen Widgets(3):配置Activity

    文章转载仅仅能用于非商业性质,且不能带有虚拟货币.积分.注冊等附加条件.转载须注明出处http://blog.csdn.net/flowingflying/以及作者@恺风Wei. 通过widget定义 ...

  4. Android学习笔记:Home Screen Widgets(2):关于Widget

    通过widget定义,我们在widget列表中看到了我们的TestWidget.当我们拖拽widget到主页时,假设在appwidet-provider中定义了android:configure的ja ...

  5. Android 学习笔记之Volley(七)实现Json数据加载和解析...

    学习内容: 1.使用Volley实现异步加载Json数据...   Volley的第二大请求就是通过发送请求异步实现Json数据信息的加载,加载Json数据有两种方式,一种是通过获取Json对象,然后 ...

  6. Android学习笔记进阶之在图片上涂鸦(能清屏)

    Android学习笔记进阶之在图片上涂鸦(能清屏) 2013-11-19 10:52 117人阅读 评论(0) 收藏 举报 HandWritingActivity.java package xiaos ...

  7. android学习笔记36——使用原始XML文件

    XML文件 android中使用XML文件,需要开发者手动创建res/xml文件夹. 实例如下: book.xml==> <?xml version="1.0" enc ...

  8. Android学习笔记之JSON数据解析

    转载:Android学习笔记44:JSON数据解析 JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,采用完全独立于语言的文本格式,为Web应用开发提供了一种 ...

  9. udacity android 学习笔记: lesson 4 part b

    udacity android 学习笔记: lesson 4 part b 作者:干货店打杂的 /titer1 /Archimedes 出处:https://code.csdn.net/titer1 ...

随机推荐

  1. CCIE路由实验(8) -- QoS

    1.查看端口缺省的队列机制2.配置CB-WFQ3.配置CB-LLQ4.配置CB-Shapping在以太接口下5.配置CB-Shapping在FR接口下6.配置帧中继流量整形FRTS7.配置CB-Pol ...

  2. codeforces 264D Colorful Stones

    题目 题目来自于rng_58Orz. 算法 讨论某个状态\((x,y)\)是否可达,\(x\)是狐狸到达的石头,\(y\)是猫的. 题解说,如果满足以下条件,那么它就是可到达状态: \(t[0..y] ...

  3. JavaScript提高:005:ASP.NET使用easyUI TABS标签显示问题

    前面使用easy ui来实现了一个tabs标签(http://blog.csdn.net/yysyangyangyangshan/article/details/38307477),只是在ASP.NE ...

  4. SVN库迁移

    最后库迁移.机会主义的,在源库资源,然后上传到目标库,最后client更新url地址.的库被组长一眼识破,由于新库中没有大家的操作日志. 这次吸取上次的教训,用dump和load完毕SVN库迁移. 整 ...

  5. [ACM] hdu 1251 统计难题 (字典树)

    统计难题 Problem Description Ignatius近期遇到一个难题,老师交给他非常多单词(仅仅有小写字母组成,不会有反复的单词出现),如今老师要他统计出以某个字符串为前缀的单词数量(单 ...

  6. 终于懂了:WM_PAINT中应该用BeginPaint与EndPaint这两个api,它们的功能正是使无效区域恢复(所以WM_PAINT里即使什么都不做,也必须写上BeginPaint与EndPaint)——Delphi里WM_PAINT消息的三个走向都做到了这一点 good

    程序本来是想实现鼠标单击改变背景颜色.可是,程序运行时,为什么没有任何消息触发,背景颜色就一直不断的改变了?WM_PAINT怎么被触发的 #include <windows.h> #inc ...

  7. 大白痴学习webmagic

    摘要 webmagic 学习 从头 刚刚开始学,很多东西可能理解错了,还请各位指教 一些基本类: Request:包含要爬行的url和一些附加信息,是Page的一个成员变量 主要成员变量 String ...

  8. 【linux】内核+文件系统下载到开发板

    K开发 欢迎转载,转载时请保留作者信息,谢谢. 邮箱:tangzhongp@163.com 博客园地址:http://www.cnblogs.com/embedded-tzp Csdn博客地址:htt ...

  9. Java多线程-实例解析

    Java多线程实例 3种实现方法Java中的多线程有三种实现方式:1.继承Thread类,重写run方法.Thread本质上也是一个实现了Runnable的实例,他代表一个线程的实例,并且启动线程的唯 ...

  10. 14.10.3 InnoDB Checkpoints InnoDB 检查点:

    14.10.3 InnoDB Checkpoints InnoDB 检查点: 你的log files 变的很大可能会降低磁盘性能在checkpointing的时候, 它通常设置设置log files总 ...