[Android学习]Activity之间传递对象和对象集合
开发过程中,Activity之间传递数据是必不可少的,android中使用Intent和Bundle作为数据载体,在Activity之间传递,对于基础数据类型,Bundle已经提供相关的put,get方法,而作为自定义的类型则需要有特别的要求.
自定义类型,想要使用Bundle传递时,需要满足特定条件。即该类型需要实现Serializable接口或者Parcelable接口
(注意:如果目标对象中包含其他对象,则被包含的对象也需要实现Serializable接口或者Parcelable接口)
(关于Serializable接口和Parcelable接口就不在此做记录了)
步骤:
1.定义类,实现相关接口
2.使用Intent和Bundle对应的方法set数据
3.startActivity传递Intent对象
使用Serializable
一.传递对象
a).定义类,实现Serializable接口
public class Student implements Serializable
{
// members
private String name; private String age; private int id; // getter setter
public int getId()
{
return id;
}
public void setId(int id)
{
this.id = id;
}
public String getName()
{
return name;
}
public void setName(String name)
{
this.name = name;
}
public String getAge()
{
return age;
}
public void setAge(String age)
{
this.age = age;
} /**
* Serializable
*/
private static final long serialVersionUID = 1L;
}
Student
b).使用Intent传递对象
// 使用Serializable
Button btnSerializable = (Button)findViewById(R.id.btnSerializable);
btnSerializable.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View arg0)
{
// TODO Auto-generated method stub // create data
Student student = new Student();
student.setName("stephen lee");
student.setAge("12");
student.setId(1); // bundle
Bundle bundle = new Bundle();
bundle.putSerializable(MainActivity.StudentKey,student); // intent
Intent intent = new Intent(arg0.getContext(),SecondActivity.class);
intent.putExtras(bundle); // navigate
startActivity(intent);
}
});
使用Serializable
c).获取传递的数据
Bundle bundle = this.getIntent().getExtras();
Student student = (Student)bundle.getSerializable(MainActivity.StudentKey);
if(student!=null)
textView.setText("name:" + student.getName() + "age:" + student.getAge() + "id:" + student.getId());
SecondActivity
二.传递对象集合
a).同上
b).同上(注意使用putSerializable()方法时,需要把List<>强转成为Serializable,并且集合中的成员都需要实现Serializable接口)
Button btnSerializableList = (Button)findViewById(R.id.btnSerializableList);
btnSerializableList.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View v)
{
// TODO Auto-generated method stub // create data
List<Student> students = new ArrayList<Student>(); Student student1 = new Student();
student1.setName("hellenism");
student1.setAge("12");
student1.setId(1); Student student2 = new Student();
student2.setName("stephen lee");
student2.setAge("12");
student2.setId(2); students.add(student1);
students.add(student2); // bundle , 注意:使用putSerializable()方法时,需要把List<>强转成为Serializable,并且集合中的成员都需要实现Serializable接口
Bundle bundle = new Bundle();
bundle.putSerializable(MainActivity.StudentsKey,(Serializable)students); // intent
Intent intent = new Intent(v.getContext(),SecondActivity.class);
intent.putExtras(bundle); // navigate
startActivity(intent);
}
});
使用Serializable
c).同上(不足之处在于,由于获取数据时候,需要把Serializable强转成为对应的List<>,此处会有警告)
Bundle bundle = this.getIntent().getExtras();
List<Student> students = (List<Student>)bundle.getSerializable(MainActivity.StudentsKey);
if(students!=null)
textView.setText("name:" + students.get(1).getName() + "age:" + students.get(1).getAge() + "id:" + students.get(1).getId());
SecondActivity
使用Parcelable
一.传递对象
a).定义类,实现Parcelable接口
public class Person implements Parcelable
{
// members
private String name;
private String age;
private int id; // getter setter
public int getId()
{
return id;
} public void setId(int id)
{
this.id = id;
} public String getName()
{
return name;
} public void setName(String name)
{
this.name = name;
} public String getAge()
{
return age;
} public void setAge(String age)
{
this.age = age;
} // Parcelable
@Override
public int describeContents()
{
// TODO Auto-generated method stub
return 0;
} @Override
public void writeToParcel(Parcel dest, int flags)
{
// TODO Auto-generated method stub
dest.writeString(name);
dest.writeString(age);
dest.writeInt(id);
} public static final Parcelable.Creator<Person> CREATOR = new Creator<Person>() {
public Person createFromParcel(Parcel source) {
Person person = new Person();
person.age = source.readString();
person.name = source.readString();
person.id = source.readInt();
return person;
} public Person[] newArray(int size) {
return new Person[size];
}
};
}
Parcelable接口
b).使用Intent传递参数
// 使用Parcelable
Button btnParcelable = (Button)findViewById(R.id.btnParcelable);
btnParcelable.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View arg0)
{
// TODO Auto-generated method stub // create data
Person person = new Person();
person.setName("i am person");
person.setAge("12");
person.setId(1); // bundle
Bundle bundle = new Bundle();
bundle.putParcelable(MainActivity.PersonKey,person); // intent
Intent intent = new Intent(arg0.getContext(),SecondActivity.class);
intent.putExtras(bundle); // navigate
startActivity(intent);
}
});
使用Intent
c).获取传递的参数
Bundle bundle = this.getIntent().getExtras();
Person person = (Person)bundle.getParcelable(MainActivity.PersonKey);
if(person!=null)
textView.setText("name:" + person.getName() + "age:" + person.getAge() + "id:" + person.getId());
获取传递的参数
二.传递数据类型
a).同上
b).同上
Button btnParcelableList = (Button)findViewById(R.id.btnParcelableList);
btnParcelableList.setOnClickListener(new View.OnClickListener()
{ @Override
public void onClick(View v)
{
// TODO Auto-generated method stub // create data
List<Person> persons = new ArrayList<Person>(); Person person1 = new Person();
person1.setAge("12");
person1.setName("stephen lee");
person1.setId(1); Person person2 = new Person();
person2.setAge("12");
person2.setName("hellenism");
person2.setId(2); persons.add(person1);
persons.add(person2); // bundle
Bundle bundle = new Bundle();
bundle.putParcelableArrayList(MainActivity.PersonsKey, (ArrayList<? extends Parcelable>) persons); // intent
Intent intent = new Intent(v.getContext(),SecondActivity.class);
intent.putExtras(bundle); // navigate
startActivity(intent);
}
});
使用Intent传递参数
c).同上
Bundle bundle = this.getIntent().getExtras();
List<Person> persons = bundle.getParcelableArrayList(MainActivity.PersonsKey);
if(persons!=null)
textView.setText("name:" + persons.get(1).getName() + "age:" + persons.get(1).getAge() + "id:" + persons.get(1).getId());
获取参数
注意:
使用以上方法传递对象时,都是创建了新的实例,而非传递对象的引用,如果是传递引用,也就无需序列化了。
完整例子:
http://pan.baidu.com/s/1dDf5p8d
[Android学习]Activity之间传递对象和对象集合的更多相关文章
- Android之Activity之间传递对象
在非常多时候,我们须要在Activity之间传递对象,比方当你点击了某列表的item,须要传递给下一个Activity该对象,那我们须要该怎么做呢? Android支持两种传递对象的方式.一种是bun ...
- Android基础 -- Activity之间传递数据(bitmap和map对象)
原文:http://blog.csdn.net/xueerfei008/article/details/23046341 做项目的时候需要用到在2个activity之间传递一些数据,之前做的都是些字符 ...
- 大叔也说Xamarin~Android篇~Activity之间传递数组
回到目录 我们在开发应用程序时,不可能只使用一个Layout或者一个Activity,比如你个管理系统,要求用户先登陆然后再使用,这时你至少要有两个activity吧,先登陆一个,然后成功后需要跳到别 ...
- Android学习总结——Activity之间传递参数
核心内容:一.在 Activity 之间传递简单数据二.在 Activity 之间传递复杂数据 三.在 Activity 之间传递自定义值对象 软件环境:Android Studio 一.在 ...
- Android中如何使用Intent在Activity之间传递对象[使用Serializable或者Parcelable]
http://blog.csdn.net/cjjky/article/details/6441104 在Android中的不同Activity之间传递对象,我们可以考虑采用Bundle.putSeri ...
- Activity之间传递数据或数据包Bundle,传递对象,对象序列化,对象实现Parcelable接口
package com.gaojinhua.android.activitymsg; import android.content.Intent; import android.os.Bundle; ...
- Activity 之间 传递 List 封装的对象或者对象
项目中遇到 从也个页面向还有一个页面跳转传递一个List 封装的对象 .按网上查的资料 须要把 对象 实现 Serializable接口. 写了一下.可是跳转直接崩溃.一直看错误之日找不到原因后来自习 ...
- Android 笔记-Fragment 与 Activity之间传递数据
Fragment 与 Activity之间传递数据有两种方法.一种是使用setArgument,一种是使用接口回调.以下先学习第一种方法. (1)使用setArgument方法: 为了便于理解,我在这 ...
- 【Android 复习】 : Activity之间传递数据的几种方式
在Android开发中,我们通常需要在不同的Activity之间传递数据,下面我们就来总结一下在Activity之间数据传递的几种方式. 1. 使用Intent来传递数据 Intent表示意图,很多时 ...
随机推荐
- C++ 库研究笔记——通过inline避免hpp 的mutiple definition 错误
C++用了这么多年,这个却第一次知道,以前没用过hpp 这样: // foo.hpp void foo() { /* body */ } // a.cpp #include "foo.hpp ...
- http://www.cutt.com/
简网APP工场-服务介绍 服务介绍
- 使用C语言实现字符串中子字符串的替换
描述:编写一个字符串替换函数,如函数名为 StrReplace(char* strSrc, char* strFind, char* strReplace),strSrc为原字符串,strFind是待 ...
- MSSQL - 存储过程取出5条热点新闻
USE [DB_News] GO /****** Object: StoredProcedure [dbo].[SelectHotNews] Script Date: 2015/7/8 13:34:4 ...
- 基于visual Studio2013解决面试题之0704判断牌是否顺子
题目
- VC++2005、VC2008中Release版本设置为可调试的设置方法
一.很多时候需要在Release版本下调试程序,可以使用以下方法设置: 1.无效断点所在的项目和启动项目的设置:项目->属性->配置属性->C/C++->常规->调试信息 ...
- C 语言资源大全中文版
C 语言资源大全中文版 我想很多程序员应该记得 GitHub 上有一个 Awesome - XXX 系列的资源整理.awesome-c 是 koz.ross 发起维护的 C 语言资源列表,内容包括了: ...
- ExtJs4 笔记(13) Ext.menu.Menu 菜单、Ext.draw.Component 绘图、Ext.resizer.Resizer 大小变更
本篇讲解菜单.绘图.还有大小变更控件.菜单控件可以附加到各种其他控件中,比如按钮.工具栏等,甚至可以直接通过通过右键打开(模拟右键菜单):ext对绘图的支持可以让我们通过js来绘图:大小变更控件可以让 ...
- Introduction to Probability (三) Independence
两个事件独立性的定义是:事件A的发生对事件B的发生毫无影响,即从A的发生与否.我们不能猜測出B是否发生. 从概率等式的表示来看就是B在A发生的情况下发生的概率等于B发生的概率本身. 进而引出了A与B同 ...
- 中科同向备份软件Heartsone-backup(足足16个软件,可差异化备份虚拟机)
传统的备份方式我们应该尽量避免,除非他们支持和执行使用基于(API)的虚拟环境中的管理备份.中科同向备份软件Heartsone-backup V8.0(以下简称HBU)就是通过VADP提供的一系列管理 ...