上一篇讲了activity的创建和启动,这一篇,我们来讲讲activity的数据传递

activity之间的数据传递,这里主要介绍的是activity之间简单数据的传递,直接用bundle传递基本数据类型的数据。另一种数据类型是parcelable和serialable

用bundle 传递数据有两种情况,这篇文章就分别从两个方面说明一下。

一、利用bundle传递基本数据类型

1、启动时传递数据,使用intent的put方法,将数据写入bundle中,然后startActivity(intent)就能够将数据究竟到目标activity中去

AActivity中传递数据:

Intent intent = new Intent(AActivity.this, BActivity.class);
intent.putExtra("name", "android");
intent.putExtra("age", 20);
intent.putExtra("isStudent", true);
startActivity(intent);

BActivity中接收数据: 目标activity中通过getIntent()方法获取Intent 对象,然后就能够通过getString getInt getBoolean等方法获取到传递过来的基本数据类型的数据

String name = getIntent().getStringExtra("name");
int age = getIntent().getIntExtra("age", 0);
Boolean isStudent = getIntent().getBooleanExtra("isStudent", false);

执行结果:

2、关闭时返回数据

AActivity中启动activity

Intent intent = new Intent(AActivity.this, BActivity.class);
startActivityForResult(intent, 1);

BActivity中关闭activity并返回数据到AActivity

B中要做的工作有将要返回的数据放入intent中,然后设置返回结果码setResult(resultCode)一般结果码都是Activity.RESULT_OK,然后调用finish方法,关闭activity,返回到之前的activity

Intent intent = new Intent();
intent.putExtra("name", "这是bactivity关闭传递的数据");
setResult(Activity.RESULT_OK,intent);
finish();

接下来要在启动前的activity中接收返回的数据,重写ActivityResult方法就可以,第三个參数就是带数据的intent

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
// TODO Auto-generated method stub
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == Activity.RESULT_OK) {
switch (requestCode) {
case 100:
resultTxt.setText(data.getStringExtra("result"));
break;
default:
break;
}
} }

二、利用parcelabel和serializable传递复杂数据类型

1、parcelable传递数据

假设要传递自己定义的数据类型,那么将自己定义数据类型实现parcelable接口就可以。传递方法例如以下:

自己定义数据类型要实现parcelable接口,然后实现两个个方法describeContents   writeToParcel而且创建一个CREATOR,例如以下所看到的:

package com.yang.intentdemo;

import java.io.Serializable;

import android.os.Parcel;
import android.os.Parcelable; public class Person implements Parcelable {
private String name;
private int age;
private String job; public Person(String name, int age, String job) {
super();
this.name = name;
this.age = age;
this.job = job;
} @Override
public String toString() {
return "Person [name=" + name + ", age=" + age + ", job=" + job + "]";
} public Person() {
super();
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public int getAge() {
return age;
} public void setAge(int age) {
this.age = age;
} public String getJob() {
return job;
} public void setJob(String job) {
this.job = job;
} @Override
public int describeContents() {
// TODO Auto-generated method stub
return 0;
} @Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(name);
dest.writeInt(age);
dest.writeString(job);
// TODO Auto-generated method stub } public static final Creator<Person> CREATOR = new Creator<Person>() { @Override
public Person createFromParcel(Parcel source) {
// TODO Auto-generated method stub
return new Person(source.readString(),source.readInt(),source.readString());
} @Override
public Person[] newArray(int size) {
// TODO Auto-generated method stub
return new Person[size];
}
}; }

传递对象:

在MainActivity中传递对象:

Intent intent = new Intent(MainActivity.this,ReceivActivity.class);
Person person = new Person();
person.setName("zhangsan");
person.setAge(20);
person.setJob("IOS");
intent.putExtra("person", person);
startActivity(intent);

在ReceiveActivity中取出对象:

Person person = getIntent().getParcelableExtra("person");//接收对象
if (person!=null) {
tv1.setText("接收的对象是:"+person.toString());
}

显示结果例如以下:

传递集合:

在MainActivity中传递集合:

Intent intent = new Intent();
ArrayList<Person> persons = new ArrayList<Person>();
Person person = new Person("wangwu", 18, "Android");
Person person1 = new Person("lisi", 26, "PHP");
Person person2 = new Person("zhaoliu", 24, "IOS");
persons.add(person);
persons.add(person1);
persons.add(person2);
intent.putParcelableArrayListExtra("persons", persons);
intent.setClass(MainActivity.this, ReceivActivity.class);
startActivity(intent);

在ReceiveActivity中取出集合:

ArrayList<Person> persons = getIntent().getParcelableArrayListExtra("persons");

		if (persons!=null && persons.size()>0) {

			StringBuilder sb = new StringBuilder();

			for(Person personlist : persons){
sb.append(personlist.getName()+"=="+personlist.getAge()+"=="+personlist.getJob()+"\n");
} tv2.setText(sb.toString());
}

结果显演示样例如以下:

2、serializable传递数据

Android学习之路——Android四大组件之activity(二)数据的传递的更多相关文章

  1. Android学习笔记五:四大组件(转)

    转自:http://blog.csdn.net/shenggaofei/article/details/52450668 Android四大组件分别为activity.service.content ...

  2. Android学习之路——简易版微信为例(一)

    这是“Android学习之路”系列文章的开篇,可能会让大家有些失望——这篇文章中我们不介绍简易版微信的实现(不过不是标题党哦,我会在后续博文中一步步实现这个应用程序的).这里主要是和广大园友们聊聊一个 ...

  3. Android四大组件之——Activity的生命周期(图文详解)

        转载请在文章开头处注明本博客网址:http://www.cnblogs.com/JohnTsai       联系方式:JohnTsai.Work@gmail.com       [Andro ...

  4. Android学习之路——简易版微信为例(二)

    1 概述 从这篇博文开始,正式进入简易版微信的开发.深入学习前,想谈谈个人对Android程序开发一些理解,不一定正确,只是自己的一点想法.Android程序开发不像我们在大学时候写C控制台程序那样, ...

  5. Android四大组件之——Activity的开启:StartActivity()和StartActivityForResult()(图文详解)

                如需转载请在文章开头处注明本博客网址:http://www.cnblogs.com/JohnTsai       联系方式:JohnTsai.Work@gmail.com   ...

  6. 【Android开发日记】之入门篇(四)——Android四大组件之Activity

    在Android中,无论是开发者还是用户,接触最多的就算是Activity.它是Android中最复杂.最核心的组件.Activity组件是负责与用户进行交互的组件,它的设计理念在很多方面都和Web页 ...

  7. 【Android】安卓四大组件之Activity(二)

    [Android]安卓四大组件之Activity(二) 前言 在这篇文章之前,我已经写过了一篇有关Activity的内容,是关于activity之间的页面跳转和数据传递,而这篇文章着重强调的是Acti ...

  8. 【Android】安卓四大组件之Activity(一)

    [Android]安卓四大组件之Activity(一) 前言 Activity是Android学习中的一个重要组件,想要对其进行系统的了解可以分为几块内容,这一大章节的内容是有关于activity之间 ...

  9. Android的四大组件之Activity

    Android的四大组件之Activity Activity:是Android组件中最基本也是最为常见用的四大组件(Activity,Service服务,Content Provider内容提供者,B ...

随机推荐

  1. JAVAEE学习

    首先要明白Java体系设计到得三个方面:J2SE,J2EE,J2ME(KJAVA).J2SE,Java 2 Platform Standard Edition,我们经常说到的JDK,就主要指的这个,它 ...

  2. js接收复选框的值

    <td><input type="checkbox" class="title" name="title" value=& ...

  3. (转)jquery.validate.js 的 remote 后台验证

    之前已经有一篇关于jquery.validate.js验证的文章,还不太理解的可以先看看:jQuery Validate 表单验证(这篇文章只是介绍了一下如何实现前台验证,并没有涉及后台验证remot ...

  4. RecycleView 滑动到底部,加载更多

    android.support.v7 包提供了一个新的组件:RecycleView,用以提供一个灵活的列表试图.显示大型数据集,它支持局部刷新.显示动画等功能,可以用来取代ListView与GridV ...

  5. 解决“Word无法访问您试图使用的功能所在的网络位置”问题

    解决“Word无法访问您试图使用的功能所在的网络位置”问题 打开Word时出现现现在的对话框,按取消,又可以打开word文档 按取消时,仍然可以打开word文档.为了解决这个问题,我借助网络,知道这是 ...

  6. 接入淘宝SDK(OneSDK)和支付宝SDK(AlipaySDK)出现 duplicate symbols for architecture i386

    起初我在我的项目中先接入了AlipaySDK,没有出现什么问题,之后想要接入淘宝SDK之后,就出现了duplicate symbols for architecture i386的错误 经过一段时间排 ...

  7. C++重载操作符

    重载的函数操作符,对对象使用起来就像对象是一个函数一样 class A{public:A(int n);int operator()(int n);  //需要一个参数,返回int类型void out ...

  8. php实现获取汉字的首字母实例

    //取汉字的asc区间然后返回汉字首字母了,代码如下:header("Content-type: text/html; charset=utf-8"); function getf ...

  9. 01 - 概述 VTK 6.0 迁移

    摘要 对vtk版本4和5的管道机制重新架架构的主要目的是:迁移数据对象和算法对象中的管道执行逻辑到一个新集合的类中,我们称这个集合类叫executives.分离数据和执行模型的代码后,可以双双简化修改 ...

  10. 剑指offer之O(1)算法删除指针所指向的节点

    题目如图: 1.把要删除pToBeDeleted的节点的后面节点覆盖点要删除的节点pToBeDeleted 2.要考虑如果删除的节点是最后一个节点怎么办 3.要考虑如果总共只有一个节点,删除的是头结点 ...