1 概述

Activity之间的跳转主要使用

startActivity(Intent intent);startActivityForResult(Intent intent,int requestCode);

这两个函数,传递数据的话利用Intent进行传递,负责数据需要配合Bundle使用.这篇文章讲述了如何利用这两个函数在Activity之间的跳转以及传递数据.

2 Activity间跳转

2.1 直接跳转

这里有两个Activity:FirstActivity与SecondActivity,从FirstActivity中跳转到SecondActivity中只需要一个startActivity()即可:

startActivity(new Intent(this,SecondActivity.class));

一般需要在SecondActivity中加上finish()函数,表示这个Activity结束,比如这里直接在SecondActivity的按钮事件里面加上了finish():

2.2 回调

很多情况下需要在FirstActivity跳转到SecondActivity后,在SecondActivity进行相应的操作,如更新数据之类,然后返回FirstActivity,通知FirstActivity执行某些操作,这时候就需要使用startActivityForResult().
startActivityForResult有两个参数,一个是Intent,表示将要跳转的Activity,一个是requestCode(int类型),表示请求码,用于调用Activity的onActivityResult()函数.
如FirstActivity中:

startActivityForResult(new Intent(this,SecondActivity.class),11);

这里11就是请求码,然后在SecondActivity中,使用setResult()函数:

setResult(22,new Intent().putExtra("str","from second activity"));

setResult()接受两个参数,第一个参数表示resultCode,从这个SecondActivity返回的结果码,另一个Intent,表示要返回给FirstActivity的数据.
最后在FirstActivity中重载onActivityResult():

onActivityResult中判断请求码与结果码后进行相应操作.

3 Activity间传递数据

3.1 传递普通数据

传递普通类型的数据直接使用Intent的putExtra()即可,putExtra接受两个参数,第一个是一个String,表示键,第二个是值,类型可以是byte,char,short,long等基本类型与这些基本类型组成的数组,当然String也可以.

比如在FirstActivity中,传递数据给SecondActivity:

然后在SecondActivity中使用getIntent()获取Intent后,再从里面获取数据:

如果想从SecondActivity中返回数据给FirstActivity,也就是从被调用的Activity中返回数据,可以使用前面介绍过的setResult()方法.
其中第二个参数是一个用于存储数据的Intent,把数据put进去即可.

最后记得在onActivityResult做相应的判断处理:

3.2 传递一组数据

当数据的种类变多时,比如混合了int,String,byte,char等,可以对逐个类型使用putExtra(),但更好的方法是使用Bundle.
Bundle的使用与Intent类似,也是对于不同的类型采用键值对的添加方法,直接putXXX:

数据添加完毕之后,在intent中使用putExtras(bundle):

然后就可以在SecondActivity中接收数据了.
首先需要使用getIntent().getExtras()获取Bundle,再获取里面的数据.

注意一下获取到的Bundle有可能为null,取数据前需要判断一下.

3.3 传递对象

如果想要传递的数据是一个对象怎么办?难道对每一个属性都使用getter再放进去吗?
并不是,Bundle提供了一个处理序列化对象的方法:

只要对象实现了Serializable,就可以被Bundle处理,比如这里有一个测试类Student:

然后在FirstActivity中直接new一个,并使用Bundle的putSerializable即可.

接着再SecondActivity中通过Intent取出Bundle后,使用其中的getSerializable()取出对象,最后使用强制类型转换:

4 源码

github
码云

更多相关文章

  1. 一句话锁定MySQL数据占用元凶
  2. Android(安卓)day_09-02 (Activity 短信发送器案例)
  3. 安卓四大组件之——ContentProvider学习
  4. android 数据存储——SharedPreferences,有代码实现,简单易懂
  5. ViewModels 和 LiveData:模式 +反模式
  6. Android(摩托)HttpURLConnection getInputStream()堵塞
  7. Android-Room自定义类型
  8. Android手写数据库框架设计(删改查)
  9. Android(安卓)MVVM Demo

随机推荐

  1. android 图片双缓存,开源框架 universali
  2. 如何检查后台服务(Android的Service类)是否
  3. Android(安卓)webkit 事件传递流程
  4. Android游戏引擎Rokon宣布停止更新
  5. Android使用WebView和JS互相调用
  6. Android(安卓)Broadcast receiver 编程
  7. Android监测手指上下左右滑动屏幕
  8. Android中如何获得一些系统设置和环境变
  9. android IPC及原理简介
  10. Android开发指南(36) —— Search