Android Activity间跳转与传递数据

1 概述

Activity之间的跳转主要使用java

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

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

2 Activity间跳转

2.1 直接跳转

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

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中:ide

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作相应的判断处理:
在这里插入图片描述
在这里插入图片描述this

3.2 传递一组数据

当数据的种类变多时,好比混合了int,String,byte,char等,能够对逐个类型使用putExtra(),但更好的方法是使用Bundle.
Bundle的使用与Intent相似,也是对于不一样的类型采用键值对的添加方法,直接putXXX:
在这里插入图片描述
数据添加完毕以后,在intent中使用putExtras(bundle):
在这里插入图片描述
而后就能够在SecondActivity中接收数据了.
首先须要使用getIntent().getExtras()获取Bundle,再获取里面的数据.
在这里插入图片描述
注意一下获取到的Bundle有可能为null,取数据前须要判断一下.
在这里插入图片描述3d

3.3 传递对象

若是想要传递的数据是一个对象怎么办?难道对每个属性都使用getter再放进去吗?
并非,Bundle提供了一个处理序列化对象的方法:
在这里插入图片描述
只要对象实现了Serializable,就能够被Bundle处理,好比这里有一个测试类Student:
在这里插入图片描述
而后在FirstActivity中直接new一个,并使用Bundle的putSerializable便可.
在这里插入图片描述
接着再SecondActivity中经过Intent取出Bundle后,使用其中的getSerializable()取出对象,最后使用强制类型转换:
在这里插入图片描述
在这里插入图片描述code

4 源码

github
码云

相关文章
相关标签/搜索