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

Android支持两种传递对象的方式。一种是bundle.putSerializable方式,一种是bundle.putParcelable。

那么以下我们就用一个样例来实践Activity传递对象:

1.首先建立两个类,一个Teacher类表示老师,一个Student类表示学生。内容分别例如以下:

<span style="font-size:18px;">public class Teacher implements Serializable {

	private static final long serialVersionUID = -7060210544600464481L;

	private String name;
private int age;
private String addr; public Teacher(String name, int age, String addr) {
super();
this.name = name;
this.age = age;
this.addr = addr;
} 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 getAddr() {
return addr;
} public void setAddr(String addr) {
this.addr = addr;
} @Override
public String toString() {
String temp = "老师姓名:" + this.name + " 年龄:" + this.age + " 地址:"
+ this.addr;
return temp;
} }</span>
<span style="font-size:18px;">import android.os.Parcel;
import android.os.Parcelable; public class Student implements Parcelable { private String name;
private int age;
private String addr; public static final Parcelable.Creator<Student> CREATOR = new Creator<Student>() { @Override
public Student[] newArray(int size) {
return new Student[size];
} @Override
public Student createFromParcel(Parcel source) {
Student stu = new Student();
stu.name = source.readString();
stu.age = source.readInt();
stu.addr = source.readString();
return stu;
}
}; @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(addr);
} public Student(){ } public Student(String name, int age, String addr) {
super();
this.name = name;
this.age = age;
this.addr = addr;
} 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 getAddr() {
return addr;
} public void setAddr(String addr) {
this.addr = addr;
} @Override
public String toString() {
String temp = "学生姓名:" + this.name + " 年龄:" + this.age + " 地址:"
+ this.addr;
return temp;
} }</span>

当中Teacher类实现了Serializable接口,Student类实现了Parcelable接口。

2.创建两个Activity,第一个Activity叫做FirstActivity。它里面有两个对象:一个Teacher对象,一个Student对象,我们如今须要将这两个对象传递给第二个Activity。即SecondActivity。

首先我们看一下FirstActivity的布局:

FirstActivity的内容例如以下:

import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener; public class FirstActivity extends Activity implements OnClickListener{ public static final String TEACHER_KEY = "key_teacher";
public static final String STUDENT_KEY = "key_student"; private Teacher teacher = new Teacher("刘备", 36, "荆州");
private Student student = new Student("张飞", 32, "新野"); @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_first); findViewById(R.id.button1).setOnClickListener(this);
} @Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.button1:
Bundle bundle = new Bundle();
bundle.putSerializable(TEACHER_KEY, teacher);
bundle.putParcelable(STUDENT_KEY, student);
Intent intent = new Intent(FirstActivity.this,SecondActivity.class);
intent.putExtras(bundle);
startActivity(intent);
break; default:
break;
} } }

然后我们再看一下SecondActivity的布局:



里面就仅仅有一个TextView。

然后我们看一下SecondActivity的内容,它主要是将传递过来的对象显示到TextView其中:

import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.view.Menu;
import android.widget.TextView; public class SecondActivity extends Activity { @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_second); Intent intent = this.getIntent();
Bundle bundle = intent.getExtras();
Teacher t = (Teacher) bundle.getSerializable(FirstActivity.TEACHER_KEY);
Student s = bundle.getParcelable(FirstActivity.STUDENT_KEY); String text = t.toString() + "\n" + s.toString(); ((TextView)findViewById(R.id.text_view)).setText(text);
} }

当我们点击了FirstActivity的界面上的"開始传递对象"button后,跳转到SecondActivity,界面例如以下:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" width="480" height="205" alt="">

非常显然,这两种方式都能够成功的在Activity之间传递对象。

希望以上内容对各位读者可以带来帮助!

Android之Activity之间传递对象的更多相关文章

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

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

  2. Android中如何使用Intent在Activity之间传递对象[使用Serializable或者Parcelable]

    http://blog.csdn.net/cjjky/article/details/6441104 在Android中的不同Activity之间传递对象,我们可以考虑采用Bundle.putSeri ...

  3. Android基础 -- Activity之间传递数据(bitmap和map对象)

    原文:http://blog.csdn.net/xueerfei008/article/details/23046341 做项目的时候需要用到在2个activity之间传递一些数据,之前做的都是些字符 ...

  4. 大叔也说Xamarin~Android篇~Activity之间传递数组

    回到目录 我们在开发应用程序时,不可能只使用一个Layout或者一个Activity,比如你个管理系统,要求用户先登陆然后再使用,这时你至少要有两个activity吧,先登陆一个,然后成功后需要跳到别 ...

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

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

  6. Android的Activity之间传对象的方法

    传值代码块 //Serializeable传递对象的方法 public void SerializeMethod(){ Person mPerson = new Person(); mPerson.s ...

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

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

  8. Activity之间传递数据或数据包Bundle,传递对象,对象序列化,对象实现Parcelable接口

    package com.gaojinhua.android.activitymsg; import android.content.Intent; import android.os.Bundle; ...

  9. 【Android 复习】 : Activity之间传递数据的几种方式

    在Android开发中,我们通常需要在不同的Activity之间传递数据,下面我们就来总结一下在Activity之间数据传递的几种方式. 1. 使用Intent来传递数据 Intent表示意图,很多时 ...

随机推荐

  1. 在iframe内页面完全加载完后,关闭父页面生成的div遮罩层

    遮罩层div为iframe父页面生成,需在iframe内页面完全加载完后,关闭遮罩层 alertMsgClose() :函数为关闭遮罩层函数 此段代码在iframe页面内: <script> ...

  2. 语音跟踪:信号分解、锁相、鸡尾酒会效应、基于PR的信号分离

    NLP中关于语音的部分,其中重要的一点是语音信号从背景噪音中分离.比如在一个办公室场景中,有白天的底噪-类似于白噪音的噪音.空调的声音.键盘的啪啪声.左手边45度7米元的地方同事讨论的声音.右手边1. ...

  3. HWND CWND 转换

    一.区别HWND是句柄,CWnd是MFC窗体类,CWnd中包含HWND句柄成员对象是m_hWnd.HWND是Windows系统中对所有窗口的一种标识,即窗口句柄.这是一个SDK概念.   CWnd是M ...

  4. Python自学-1-基本概念问题

    C语言适合开发那些追求运行速度.充分发挥硬件性能的程序. Python是用来编写应用程序的高级编程语言. Python提供了 第三方库 & 基础代码库(覆盖了网络.文件.GUI.数据库.文本等 ...

  5. C# Task详解

    1.Task的优势 ThreadPool相比Thread来说具备了很多优势,但是ThreadPool却又存在一些使用上的不方便.比如: ◆ ThreadPool不支持线程的取消.完成.失败通知等交互性 ...

  6. Manjaro安装配置美化字体模糊发虚解决记录

    Manjaro安装记录 前言: ​ 记录自己Manjaro18安装的一些坑,避免下次满互联网找解决方法.在此之前试过Manjaro.Ubuntu.Fedora.linux Mint系统的pac.yum ...

  7. Linux内核-内存回收逻辑和算法(LRU)

    Linux内核内存回收逻辑和算法(LRU) LRU 链表 在 Linux 中,操作系统对 LRU 的实现主要是基于一对双向链表:active 链表和 inactive 链表,这两个链表是 Linux ...

  8. php第二十二节课

    AJAX <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3 ...

  9. The method buildSessionFactory() from the type Configuration is deprecated.SessionFactory的变化

    在创建Configuration对象之后:Configuration cfg = new Configuration().configure(); 要通过Configuration创建SessionF ...

  10. Python学习-while循环练习

    1.计算1-100的和 i = 1; total = 0; while i <= 100: total = total + i; i = i + 1; print(total); 2.打印出1- ...