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

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. lsh341999的资源

    懒得下载了,仔细研究: http://download.csdn.net/user/lsh341999/uploads/2

  2. EL显示List里嵌套map(Spring MVC3)返回的model

    <c:forEach items="${requestScope.courseList}" var="cMap" varStatus="stat ...

  3. Python文件处理(1)

    读取文件 解决方案: 最简单的就是一次性读取所有的内容放在一个大字符串中 all_the_text=open('thefile.txt').read() all_the_data=open('abin ...

  4. 微信jssdk已无力吐槽

    微信强大的整合能力让企业公众号的开发迅速窜红.尤其是企业须要个性化定制的一些功能.公司在同一时候上线的app和触屏版的应用中,微信分享自然是不可或缺的重要一环. 纵观如今大多数的微信公众号.分享大都是 ...

  5. Swift - AppDelegate.swift类中默认方法的介绍

    项目创建后,AppDelegate类中默认带有如下几个方法,具体功能如下: 1,应用程序第一次运行时执行 这个方法只有在App第一次运行的时候被执行过一次,每次App从后台激活时都不会再执行该方法. ...

  6. Spring通过工厂创建实例的注意事项

    假设第三方(or别的team)提供一个工厂类(此类是不能够改动的.往往以jar包形式提供的),须要供给我们项目来使用. 可是我们自己的项目使用了spring来配置,所以我们当然希望可以通过spring ...

  7. 深入浅出Hive企业级架构优化、Hive Sql优化、压缩和分布式缓存(企业Hadoop应用核心产品)

    一.本课程是怎么样的一门课程(全面介绍)    1.1.课程的背景       作为企业Hadoop应用的核心产品,Hive承载着FaceBook.淘宝等大佬 95%以上的离线统计,很多企业里的离线统 ...

  8. 【ASP.NET Web API教程】2.3 与实体框架一起使用Web API

    原文:[ASP.NET Web API教程]2.3 与实体框架一起使用Web API 2.3 Using Web API with Entity Framework 2.3 与实体框架一起使用Web ...

  9. android 多媒体数据库详解

    主要分为几节: 1. Android的媒体文件内部是如何存储的? 2. Andoid的媒体文件如何获取? 3. 在使用媒体文件的一些小技巧. 1. Android的多媒体如何存储的? Android的 ...

  10. 待机状态下,服务类型 WCDMA Service type in Idle mode

    Services aredistinguished into categories defined in [7]; also the categorisation of cellsaccording ...