http://blog.csdn.net/cjjky/article/details/6441104

Android中的不同Activity之间传递对象,我们可以考虑采用Bundle.putSerializable(Key,Object);也可以考虑采用Bundle.putParcelable(Key, Object);其中前面一种方法中的Object要实现Serializable接口,后面一种方法中的Object要实现Parcelable接口。下面我们以一个完整的例子来说明。

1.新建一个Android的工程,其中该工程的目录结构如下图:

2. 修改main.xml布局文件。布局文件的源码如下:

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:orientation="vertical"
  4. android:layout_width="fill_parent"
  5. android:layout_height="fill_parent"
  6. >
  7. <TextView
  8. android:layout_width="fill_parent"
  9. android:layout_height="wrap_content"
  10. android:text="@string/hello"
  11. />
  12. <Button
  13. android:id="@+id/serButton"
  14. android:layout_width="fill_parent"
  15. android:layout_height="wrap_content"
  16. android:text="Serializable"/>
  17. <Button
  18. android:id="@+id/parButton"
  19. android:layout_width="fill_parent"
  20. android:layout_height="wrap_content"
  21. android:text="Parcelable"/>
  22. </LinearLayout>

3.在工程的src目录下新建一个实体类包,命名为com.andy.entity.同时在该package中添加两个实体类,一个是Person.Java,该类实现Serializable接口;一个是Police.java,该类实现Parcelable接口。代码分别如下:

Person.java:

  1. package com.andy.entity;
  2. import java.io.Serializable;
  3. public class Person implements Serializable {
  4. private static final long serialVersionUID = -6919461967497580385L;
  5. private String name;
  6. private int age;
  7. public String getName() {
  8. return name;
  9. }
  10. public void setName(String name) {
  11. this.name = name;
  12. }
  13. public int getAge() {
  14. return age;
  15. }
  16. public void setAge(int age) {
  17. this.age = age;
  18. }
  19. }

Police.java:

  1. package com.andy.entity;
  2. import android.os.Parcel;
  3. import android.os.Parcelable;
  4. public class Police implements Parcelable {
  5. private String name;
  6. private int workTime;
  7. public String getName() {
  8. return name;
  9. }
  10. public void setName(String name) {
  11. this.name = name;
  12. }
  13. public int getWorkTime() {
  14. return workTime;
  15. }
  16. public void setWorkTime(int workTime) {
  17. this.workTime = workTime;
  18. }
  19. public static final Parcelable.Creator<Police> CREATOR = new Creator<Police>() {
  20. @Override
  21. public Police createFromParcel(Parcel source) {
  22. Police police = new Police();
  23. police.name = source.readString();
  24. police.workTime = source.readInt();
  25. return police;
  26. }
  27. @Override
  28. public Police[] newArray(int size) {
  29. return new Police[size];
  30. }
  31. };
  32. @Override
  33. public int describeContents() {
  34. return 0;
  35. }
  36. @Override
  37. public void writeToParcel(Parcel parcel, int flags) {
  38. parcel.writeString(name);
  39. parcel.writeInt(workTime);
  40. }
  41. }

4.在包com.andy.testdemo中修改TestActivity.java类,同时在该包中添加类SerializableDemo和ParcelableDemo,分别继承了Activity类和分别显示Person对象和Police对象的数据。代码如下:

  1. package com.andy.testdemo;
  2. import com.andy.entity.Person;
  3. import com.andy.entity.Police;
  4. import android.app.Activity;
  5. import android.content.Intent;
  6. import android.os.Bundle;
  7. import android.view.View;
  8. import android.widget.Button;
  9. public class TestActivity extends Activity {
  10. private Button sButton,pButton;
  11. public final static String SER_KEY = "com.andy.ser";
  12. public final static String PAR_KEY = "com.andy.par";
  13. /** Called when the activity is first created. */
  14. @Override
  15. public void onCreate(Bundle savedInstanceState) {
  16. super.onCreate(savedInstanceState);
  17. setContentView(R.layout.main);
  18. sButton = (Button)findViewById(R.id.serButton);
  19. sButton.setOnClickListener(new View.OnClickListener() {
  20. @Override
  21. public void onClick(View v) {
  22. SerializeMethod();
  23. }
  24. });
  25. pButton = (Button)findViewById(R.id.parButton);
  26. pButton.setOnClickListener(new View.OnClickListener() {
  27. @Override
  28. public void onClick(View v) {
  29. PacelableMethod();
  30. }
  31. });
  32. }
  33. /**
  34. * Serializeable传递对象的方法
  35. */
  36. private void SerializeMethod(){
  37. Person mPerson = new Person();
  38. mPerson.setName("andy");
  39. mPerson.setAge(26);
  40. Intent mIntent = new Intent(this,SerializableDemo.class);
  41. Bundle mBundle = new Bundle();
  42. mBundle.putSerializable(SER_KEY,mPerson);
  43. mIntent.putExtras(mBundle);
  44. startActivity(mIntent);
  45. }
  46. /**
  47. * Pacelable传递对象方法
  48. */
  49. private void PacelableMethod(){
  50. Police mPolice = new Police();
  51. mPolice.setName("I am Police");
  52. mPolice.setWorkTime(2008);
  53. Intent mIntent = new Intent(this,ParcelableDemo.class);
  54. Bundle mBundle = new Bundle();
  55. mBundle.putParcelable(PAR_KEY, mPolice);
  56. mIntent.putExtras(mBundle);
  57. startActivity(mIntent);
  58. }
  59. }

SerializableDemo.java类

  1. package com.andy.testdemo;
  2. import com.andy.entity.Person;
  3. import android.app.Activity;
  4. import android.os.Bundle;
  5. import android.widget.TextView;
  6. public class SerializableDemo extends Activity {
  7. @Override
  8. public void onCreate(Bundle savedInstanceState) {
  9. super.onCreate(savedInstanceState);
  10. TextView mTextView = new TextView(this);
  11. Person mPerson = (Person)getIntent().getSerializableExtra(TestActivity.SER_KEY);
  12. mTextView.setText("You name is: " + mPerson.getName() + "/n"+
  13. "You age is: " + mPerson.getAge());
  14. setContentView(mTextView);
  15. }
  16. }

ParcelableDemo.java类:

  1. package com.andy.testdemo;
  2. import com.andy.entity.Police;
  3. import android.app.Activity;
  4. import android.os.Bundle;
  5. import android.widget.TextView;
  6. public class ParcelableDemo extends Activity {
  7. @Override
  8. public void onCreate(Bundle savedInstanceState) {
  9. super.onCreate(savedInstanceState);
  10. TextView mTextView = new TextView(this);
  11. Police mPolice = (Police)getIntent().getParcelableExtra(TestActivity.PAR_KEY);
  12. mTextView.setText("Police name is: " + mPolice.getName()+"/n"+
  13. "WorkTime is: " + mPolice.getWorkTime() + "/n");
  14. setContentView(mTextView);
  15. }
  16. }

5.在AndroidManifest.xml文件中为新添加的两个Activity进行注册。

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <manifest xmlns:android="http://schemas.android.com/apk/res/android"
  3. package="com.andy.testdemo"
  4. android:versionCode="1"
  5. android:versionName="1.0">
  6. <application android:icon="@drawable/icon" android:label="@string/app_name">
  7. <activity android:name=".TestActivity"
  8. android:label="@string/app_name">
  9. <intent-filter>
  10. <action android:name="android.intent.action.MAIN" />
  11. <category android:name="android.intent.category.LAUNCHER" />
  12. </intent-filter>
  13. </activity>
  14. <activity android:name=".SerializableDemo"/>
  15. <activity android:name=".ParcelableDemo"/>
  16. </application>
  17. <uses-sdk android:minSdkVersion="8" />
  18. </manifest>

6.运行程序查看效果图:

【1】主界面截图:

【2】点击Serializable按钮的效果

【3】点击Parcelable按钮的效果

=========================================================================

以上是如何采用Intent在不同的Activity之间传递对象的例子。

 
 

Android中如何使用Intent在Activity之间传递对象[使用Serializable或者Parcelable]的更多相关文章

  1. 【Android基础】利用Intent在Activity之间传递数据

    前言: 上一篇文章给大家聊了Intent的用法,如何用Intent启动Activity和隐式Intent,这一篇文章给大家聊聊如何利用Intent在Activity之间进行沟通.   从一个Activ ...

  2. 在Activity之间传递参数(三)——serializable和parcelable的区别

    传递值对象: 一.serializable实现:简单易用 serializable的迷人之处在于你只需要对某个类以及它的属性实现Serializable 接口即可.Serializable 接口是一种 ...

  3. Android之Activity之间传递对象

    在非常多时候,我们须要在Activity之间传递对象,比方当你点击了某列表的item,须要传递给下一个Activity该对象,那我们须要该怎么做呢? Android支持两种传递对象的方式.一种是bun ...

  4. [Android学习]Activity之间传递对象和对象集合

    开发过程中,Activity之间传递数据是必不可少的,android中使用Intent和Bundle作为数据载体,在Activity之间传递,对于基础数据类型,Bundle已经提供相关的put,get ...

  5. 【转】 android之如何在两个activity之间传递handler_利用broadcast广播机制

    原文:http://blog.csdn.net/jason0539/article/details/18075293 这算是如何在两个activity之间传递handler的解决方案二了,解决方案一见 ...

  6. android中使用Intent在activity之间传递数据

    android中intent传递数据的简单使用: 1.使用intent传递数据: 首先将需要传递的数据放入到intent中 Intent intent = new Intent(MainActivit ...

  7. 利用Bundle在activity之间传递对象

    (2010-12-04 09:45:54) 转载▼ 标签: it 分类: android开发 转自:http://chen592969029.javaeye.com/blog/772656 假如需要在 ...

  8. 【转】Android中如何使用Bundle传递对象[使用Serializable或者Parcelable] -- 不错

    原文网址:http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2012/1211/694.html Android中Bundle类的作用 Bun ...

  9. Activity 之间 传递 List 封装的对象或者对象

    项目中遇到 从也个页面向还有一个页面跳转传递一个List 封装的对象 .按网上查的资料 须要把 对象 实现 Serializable接口. 写了一下.可是跳转直接崩溃.一直看错误之日找不到原因后来自习 ...

随机推荐

  1. redis连接数

    1.应用程序会发起多少个请求连接?1)对于php程序,以短连接为主.redis的连接数等于:所有web server接口并发请求数/redis分片的个数.2)对于java应用程序,一般使用JedisP ...

  2. C++ redirect input

    #include<iostream> #include<string> #include<fstream> using namespace std; int mai ...

  3. EXCEL时间日期转换为常规字符显示

    当我们做报表导入的时候,我们不得不思考这样一个问题,遇到的数据是时间格式的,而在EXCEL中,时间格式的单元格实际上是以1900年以后来计算的,例如,1900年是闰年(显然可以被4整除),那么1900 ...

  4. Smarty单模板多缓存

    Smarty单模板多缓存 单模板多缓存 在生成缓存.判断缓存是否存在时,增加第二个参数,会根据第二个参数来确定对应的缓存文件 清除缓存

  5. oracle数据泵实现不同用户之间的导出导入

    来源于:http://www.cnblogs.com/kevinsun/archive/2007/02/03/638803.aspx http://blog.sina.com.cn/s/blog_68 ...

  6. 对Ip地址进行验证

    依据正则表达式 boolean voliate(String ipString) {        // 匹配ip正则表达式        String ip = "([1-9]|[1-9] ...

  7. 如何配置全世界最小的 MySQL 服务器

    配置全世界最小的 MySQL 服务器——如何在一块 Intel Edison 为控制板上安装一个 MySQL 服务器. 介绍 在我最近的一篇博文中,物联网,消息以及 MySQL,我展示了如果 Part ...

  8. 关于使用 lua 脚本抢红包

    1 java代码 package com.robert.RedisTest; import redis.clients.jedis.Jedis; public class RedisClient { ...

  9. chrome 26.0.XXX版本下media query流媒体查询有问题的bug

    这段代码什么意思: @media only screen and (max-width: 1360px)  当用户的界面小于等于1360px的时候, 会加载该流媒体样式(此时的界面是包含滚动条的): ...

  10. 哈希 poj 3274

    n个牛 二进制最多k位 给你n个数 求max(j-i)&&对应二进制位的和相同 7    1  1  1  倒的 6    0  1  1 7    1  1  1 2    0  1 ...