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. 前端程序员应该知道的15个 jQuery 小技巧

    下面这些简单的小技巧能够帮助你玩转jQuery. 返回顶部按钮 预加载图像 检查图像是否加载 自动修复破坏的图像 悬停切换类 禁用输入字段 停止加载链接 切换淡入/幻灯片 简单的手风琴 让两个div高 ...

  2. 【转】赶集网mysql开发36军规

    原文链接:https://segmentfault.com/a/1190000004711147 写在前面的话:总是在灾难发生后,才想起容灾的重要性:总是在吃过亏后,才记得曾经有人提醒过. (一)核心 ...

  3. C++ new失败的处理

    我们都知道,使用 malloc/calloc 等分配内存的函数时,一定要检查其返回值是否为“空指针”(亦即检查分配内存的操作是否成功),这是良好的编程习惯,也是编写可靠程序所必需的.但是,如果你简单地 ...

  4. MySQL多实例

    http://www.kancloud.cn/digest/mysqlsummary/132842http://crazy123.blog.51cto.com/1029610/1611887/ htt ...

  5. SVN_限制注释长度

      一.说明 svn服务器上每个项目都会有单独一个文件夹,文件夹下有一个hooks文件夹,可以在pre-commit添加内容限制注释输入 项目t1的下的hooks文件夹   二.操作步骤 注意:修改的 ...

  6. Entity Framework Code First (五)Fluent API - 配置关系

    上一篇文章我们讲解了如何用 Fluent API 来配置/映射属性和类型,本文将把重点放在其是如何配置关系的. 文中所使用代码如下 public class Student { public int ...

  7. css-画三角箭头

    .arrow { width:; height:; content: ""; border: solid 10px #7c7; display: block; border-top ...

  8. 数据库开发基础-SQl Server 视图

    1.视图的概述            视图其实就是一条查询sql语句,用于显示一个或多个表或其他视图中的相关数据.视图将一个查询的结果作为一个表来使用,因此视图可以被看作是存储的查询或一个虚拟表.视图 ...

  9. 微信支付系列(2)——jsapi支付源码解析

    版权声明:转载请注明出处:http://blog.csdn.net/m0sh1 http://www.share345.com 在微信支付 开发者文档页面 下载最新的 PHP SDK http://m ...

  10. 【HDU 4305】Lightning(生成树计数)

    Problem Description There are N robots standing on the ground (Don't know why. Don't know how). Sudd ...