安卓自学笔记

第一章:基础知识

第三节:Activity之间传递参数

 

首先是简单传参

操作过程概要:

1.新建一个oneandthree工程

2.在启动页添加一个按钮用来启动另一个A

3.新建一个新的A,用来被启动和展示启动页传过来的数据

4.在新建的A中添加一个TextView组件,并对其写上id属性,如图

5.在启动页的java文件中写上页面跳转函数和根据Intent传参的代码,如图

6.在被启动页的java文件中写上接收参数的代码,如图

7.运行程序效果如图

 

接着是数据包Bundle的传递

操作过程概要:

1.把启动页的java文件改写为用数据包Bundle传递多个数据的形式,如图

2.改写被启动页的java文件中接收参数的代码,如图

其中,data.getString方法在我们获取的对象是不存在值的时候,可以在第二个参数的位置写上一个默认值

3.启动程序,如图

 

传递和接收数据包有两种写法,其中,

i.putExtras(b)对应Bundle data = i.getExtras()

i.putExtra("data",b)对应Bundle data = i.getBundleExtra("data")

 

然后是传递值对象

首先要知道,java平台中序列化的方法是实现Serializable接口,

而安卓又有专门面向移动设备的序列化方法,是实现Parcelable接口,

两者的区别在于,前者编写简单,但效率低于后者。先实现Serializable的方法,

操作过程概要:

1.假设要传递一个类型为User的数据,编写User的成员和方法,如图:

2.改写启动页对应的java文件,如图

3.改写被启动页对应的java文件,如图

4.启动程序,如图

再实现Parcelable接口

1.改写User.java,实现Parcelable接口,如图

2.改写被启动页java文件的接收代码,如图

3.运行程序,成功得到参数

 

最后是获取被启动的A的返回参数

1.在被启动页中加入一个输入框Plain Text和一个返回上一个页面的按钮,如图

2.在启动页加入一个TextView用来呈现被启动页所返回的参数

3.在启动页对应的java文件中,此时不能够使用startActivity(i)来启动另一个A,需要使用startActivityForResult(i,0)来启动另一个A并得到返回参数,还需要写上一个函数用来处理当收到返回参数后,将内容呈现出现。

4.而在被启动页的java文件中,使用setResult(1,i)和finish()来对设置返回参数。

5.启动程序,如图

 

startActivity()仅仅是跳转的功能,如果想回到原来的页面,必须再使用一次,而startActivityForResult一次性解决了这个过程,当被启动页执行到finish()的时候,会自动去调用启动页的onActivityResult方法。

这里的startActivityForResult和setResult和onActivityResult三个方法用到了请求码和结果码的参数,这个参数是开发者自己定义的,请求码一定要大于等于0。

请求码的作用在于:下一个A可以知道这是前面哪个控件触发的请求从而执行相应的A,因而触发不同代码,在onActivitiResult函数中,就可以用switch进行判断

switch(requestCode){
case 1:
//
case 2:
//
}


结果码同理,我们可以知道是启动了哪个新的A,不同的A的setResult函数中,设置了不同的结果码,在onActivitiResult函数中,也就可以用switch进行判断

switch(resultCode){
case 1:
//
case 2:
//
}