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. Vmware虚拟机配置LVS/NAT模式遇到的坑。

    这两天在研究LVS的负载均衡,先从最简单的LVS/NAT模式开始入手. 最后配置完之后能够相互之间Ping通,并且能够直接访问real服务器提供的web服务,而且防火墙也已经关闭了. 但是通过访问LV ...

  2. align使图片和文字居中

    <img src=...  align=absmiddle />

  3. Jquery_Ajax GET方式传递文本

    第一个网页: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www. ...

  4. VBA读取固定文件夹中txt内容

    Sub OneTxt() '打开一个txt文件 Dim Filename As Variant, extLine&, mArr() As String Dim i%, j%, txtpath ...

  5. USCAO3.26Sweet Butter(SPFA)

    最短路复杂度估计错误 以为SPFA是N*m的 用了dij超时 用SPFA直接跑就好了 O(k*e) K 一般为2,3: /* ID: shangca2 LANG: C++ TASK: butter * ...

  6. C#调用C/C++动态库 封送结构体,结构体数组

    因为实验室图像处理的算法都是在OpenCV下写的,还有就是导航的算法也是用C++写的,然后界面部分要求在C#下写,所以不管是Socket通信,还是调用OpenCV的DLL模块,都设计到了C#和C++数 ...

  7. 移动设备输入Touch类及相关API

    Touch:[结构体]存储移动端手指触摸屏幕的信息.根据触摸信息,可以在移动端实现各种功能. Input.multiTouchEnabled:是否开启触控.true:表示多点触控:false:表示单点 ...

  8. ReactNative学习笔记(三)打包、调试、运行等相关介绍

    各种命令 个人习惯在项目根目录下把一些常见命令写成bat文件,以后每次要执行什么只需要双击即可: 编译.生成.运行并启动packager(debug模式): react-native run-andr ...

  9. [ASP.NET]ASP.NET中常用的26个优化性能方法

    1. 数据库访问性能优化 数据库的连接和关闭 访问数据库资源需要创建连接.打开连接和关闭连接几个操作.这些过程需要多次与数据库交换信息以通过身份验证,比较耗费服务器资源.ASP.NET中提供了连接池( ...

  10. leetcode384

    public class Solution { private int[] nums; private Random random; public Solution(int[] nums) { thi ...