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

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. Swift学习之UI开发初探

    Swift是供iOS和OS X应用编程的新编程语言.相信很多开发者都在学习这门新语言.废话不多说,下面我就来学习使用Swift创建一个简单的UI应用程序. AD: 概述 Apple近日发布了Swift ...

  2. c语言,内存字节对齐

    引用:内存字节对齐 写出一个struct,然后sizeof,你会不会经常对结果感到奇怪?sizeof的结果往往都比你声明的变量总长度要大,这是怎么回事呢?讲讲字节对齐吧. /************* ...

  3. transition与animation

    以前,一直都知道,transition是animation的一个简化版,甚至不算是动画,而是一种过渡. transition的用法 早两天用transition写了一个按钮滑动的效果,类似于IOS的设 ...

  4. hihoCoder 1014trie树(字典树)

    hihoCoder 1014 题目提示已经很清楚了~ 贴代码…… #include <iostream> #include <cstdio> #include <cstr ...

  5. MVC简单分页

    对Car汽车表分页 实现简单分页,放在这里方便查看回顾,自定义每页几条有点问题,有待完善······ 1.新建mvc项目 2.添加linq to sql 数据库连接 3.添加CarBF类 using ...

  6. JQuery - MD5加密

    效果: JS代码: 命名为任意名称,一般为:Jquery.md5.js /** * jQuery MD5 hash algorithm function * * <code> * Calc ...

  7. EasyUI - SplitButton 分割按钮

    效果: html代码: <!--使用标签创建,直接使用即可,不必使用js代码--> <%--<a href="javascript:void(0)" id= ...

  8. 基于visual Studio2013解决C语言竞赛题之1065二维排序

        题目 解决代码及点评 /* 功能:二维数组排序.设有4×5的数组M,通过排序使 M[1][1]≤M[1][2]≤...≤M[1][5]≤M[2][1]≤M[2][2]≤...≤ ...

  9. oracle flashback 2

    Flashback  database      After oracle 10g, oracle can rollback to an prior time by flashback databas ...

  10. C#用正则表达式去掉Html中的script脚本和html标签

    原文 C#用正则表达式去掉Html中的script脚本和html标签 /// <summary>         /// 用正则表达式去掉Html中的script脚本和html标签     ...