Android中如何使用Intent在Activity之间传递对象[使用Serializable或者Parcelable]
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布局文件。布局文件的源码如下:
- <?xml version="1.0" encoding="utf-8"?>
- <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:orientation="vertical"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
- >
- <TextView
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:text="@string/hello"
- />
- <Button
- android:id="@+id/serButton"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:text="Serializable"/>
- <Button
- android:id="@+id/parButton"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:text="Parcelable"/>
- </LinearLayout>
3.在工程的src目录下新建一个实体类包,命名为com.andy.entity.同时在该package中添加两个实体类,一个是Person.Java,该类实现Serializable接口;一个是Police.java,该类实现Parcelable接口。代码分别如下:
Person.java:
- package com.andy.entity;
- import java.io.Serializable;
- public class Person implements Serializable {
- private static final long serialVersionUID = -6919461967497580385L;
- private String name;
- private int age;
- 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;
- }
- }
Police.java:
- package com.andy.entity;
- import android.os.Parcel;
- import android.os.Parcelable;
- public class Police implements Parcelable {
- private String name;
- private int workTime;
- public String getName() {
- return name;
- }
- public void setName(String name) {
- this.name = name;
- }
- public int getWorkTime() {
- return workTime;
- }
- public void setWorkTime(int workTime) {
- this.workTime = workTime;
- }
- public static final Parcelable.Creator<Police> CREATOR = new Creator<Police>() {
- @Override
- public Police createFromParcel(Parcel source) {
- Police police = new Police();
- police.name = source.readString();
- police.workTime = source.readInt();
- return police;
- }
- @Override
- public Police[] newArray(int size) {
- return new Police[size];
- }
- };
- @Override
- public int describeContents() {
- return 0;
- }
- @Override
- public void writeToParcel(Parcel parcel, int flags) {
- parcel.writeString(name);
- parcel.writeInt(workTime);
- }
- }
4.在包com.andy.testdemo中修改TestActivity.java类,同时在该包中添加类SerializableDemo和ParcelableDemo,分别继承了Activity类和分别显示Person对象和Police对象的数据。代码如下:
- package com.andy.testdemo;
- import com.andy.entity.Person;
- import com.andy.entity.Police;
- import android.app.Activity;
- import android.content.Intent;
- import android.os.Bundle;
- import android.view.View;
- import android.widget.Button;
- public class TestActivity extends Activity {
- private Button sButton,pButton;
- public final static String SER_KEY = "com.andy.ser";
- public final static String PAR_KEY = "com.andy.par";
- /** Called when the activity is first created. */
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
- sButton = (Button)findViewById(R.id.serButton);
- sButton.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- SerializeMethod();
- }
- });
- pButton = (Button)findViewById(R.id.parButton);
- pButton.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- PacelableMethod();
- }
- });
- }
- /**
- * Serializeable传递对象的方法
- */
- private void SerializeMethod(){
- Person mPerson = new Person();
- mPerson.setName("andy");
- mPerson.setAge(26);
- Intent mIntent = new Intent(this,SerializableDemo.class);
- Bundle mBundle = new Bundle();
- mBundle.putSerializable(SER_KEY,mPerson);
- mIntent.putExtras(mBundle);
- startActivity(mIntent);
- }
- /**
- * Pacelable传递对象方法
- */
- private void PacelableMethod(){
- Police mPolice = new Police();
- mPolice.setName("I am Police");
- mPolice.setWorkTime(2008);
- Intent mIntent = new Intent(this,ParcelableDemo.class);
- Bundle mBundle = new Bundle();
- mBundle.putParcelable(PAR_KEY, mPolice);
- mIntent.putExtras(mBundle);
- startActivity(mIntent);
- }
- }
SerializableDemo.java类
- package com.andy.testdemo;
- import com.andy.entity.Person;
- import android.app.Activity;
- import android.os.Bundle;
- import android.widget.TextView;
- public class SerializableDemo extends Activity {
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- TextView mTextView = new TextView(this);
- Person mPerson = (Person)getIntent().getSerializableExtra(TestActivity.SER_KEY);
- mTextView.setText("You name is: " + mPerson.getName() + "/n"+
- "You age is: " + mPerson.getAge());
- setContentView(mTextView);
- }
- }
ParcelableDemo.java类:
- package com.andy.testdemo;
- import com.andy.entity.Police;
- import android.app.Activity;
- import android.os.Bundle;
- import android.widget.TextView;
- public class ParcelableDemo extends Activity {
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- TextView mTextView = new TextView(this);
- Police mPolice = (Police)getIntent().getParcelableExtra(TestActivity.PAR_KEY);
- mTextView.setText("Police name is: " + mPolice.getName()+"/n"+
- "WorkTime is: " + mPolice.getWorkTime() + "/n");
- setContentView(mTextView);
- }
- }
5.在AndroidManifest.xml文件中为新添加的两个Activity进行注册。
- <?xml version="1.0" encoding="utf-8"?>
- <manifest xmlns:android="http://schemas.android.com/apk/res/android"
- package="com.andy.testdemo"
- android:versionCode="1"
- android:versionName="1.0">
- <application android:icon="@drawable/icon" android:label="@string/app_name">
- <activity android:name=".TestActivity"
- android:label="@string/app_name">
- <intent-filter>
- <action android:name="android.intent.action.MAIN" />
- <category android:name="android.intent.category.LAUNCHER" />
- </intent-filter>
- </activity>
- <activity android:name=".SerializableDemo"/>
- <activity android:name=".ParcelableDemo"/>
- </application>
- <uses-sdk android:minSdkVersion="8" />
- </manifest>
6.运行程序查看效果图:
【1】主界面截图:
【2】点击Serializable按钮的效果
【3】点击Parcelable按钮的效果
=========================================================================
以上是如何采用Intent在不同的Activity之间传递对象的例子。
Android中如何使用Intent在Activity之间传递对象[使用Serializable或者Parcelable]相关推荐
- Android中如何使用Intent在Activity之间传递对象[使用Serializable或者Parcelable]
Android中如何使用Intent在Activity之间传递对象[使用Serializable或者Parcelable] 在Android中的不同Activity之间传递对象,我们可以考虑采用Bun ...
- java 传递intent_Android中使用Intent在Activity之间传递对象(使用Serializable或者Parcelable)的方法...
Android中的不同Activity之间传递对象,我们可以考虑采用Bundle.putSerializable(Key,Object);也可以考虑采用Bundle.putParcelable(Key ...
- 【转】 android之如何在两个activity之间传递handler_利用broadcast广播机制
原文:http://blog.csdn.net/jason0539/article/details/18075293 这算是如何在两个activity之间传递handler的解决方案二了,解决方案一见 ...
- android activity之间传递对象,Android Activity之间的数据传递
一.通过startActivity来进行Activity的传值 在Android中,如果我们要通过一个Activity来启动另一个Activity,可以使用 startActivity(Intent ...
- Android编程权威指南学习:Activity之间传递参数
2019独角兽企业重金招聘Python工程师标准>>> 在Android编程中,经常会有多个Activity之间.同Activity的旋转都要进行调用,数据传递的现象.如何理解Act ...
- 大叔也说Xamarin~Android篇~Activity之间传递数组
大叔也说Xamarin~Android篇~Activity之间传递数组 原文:大叔也说Xamarin~Android篇~Activity之间传递数组 我们在开发应用程序时,不可能只使用一个Layout ...
- Android Activity之间传递类对象
一.简介 开发过程中,Activity之间传递数据是必不可少的,Android中使用Intent和Bundle作为数据载体,在Activity之间传递,对于基础数据类型,Bundle已经提供了相关的p ...
- Android入门篇二:使用意图在Activity之间传递数据
首先,在这里稍微介绍一下意图(Intent)的概念: Intent(意图)主要是解决Android应用的各项组件之间的通讯. Intent 负责对应用中一次操作的动作.动作涉及数据.附加数据进行描述, ...
- Android中Bundle和Intent的区别
Bundle的作用,以及和Intent的区别: 一.Bundle: A mapping from String values to various Parcelable types 键值对的集合 类继 ...
- Android截屏幕实现,截取屏幕为bitmap,并保存进手机图库,activity之间传递bitmap对象
Android截屏幕实现,截取超过一屏幕的长图,截取当前显示的一屏幕的图片,截图屏幕内的部分图片,并保存到本地,更新到手机图库中:当然还有一种bitmap在activity之间传递的需求 踩坑-–&g ...
最新文章
- LLVM编译器基础架构与DragonEgg示例
- 如何使用Gradle的maven-publish将jar包或者war包上传到nexus仓库
- eclipse 快捷键组合
- 数据挖掘:实用案例分析 下载_【实用干货】17 种服装印花工艺(图文案例分析)...
- 数据科学和人工智能技术笔记 十七、聚类
- 中国女排代言作业帮直播课,作业帮累计用户已超8亿
- Python内置函数any()、map()组合运用案例一则
- 使用Dev-C++查看vector数组中的变量值
- POJ NOI0105-41 数字统计
- ati.c ATI顯卡開發源代碼
- 阿里巴巴java开发手册心得_阿里巴巴JAVA开发手册总结
- 递归下降分析程序的设计和实现
- 苏宁有货:为“轻创业”而来
- 携程酒店数据爬取(新)
- 微信小程序使用font awsome图标库(最新fontawsome5)
- C# 在load构造函数设定dgv背景字体颜色无效 解决办法
- 还在到处寻找画图软件?快来用Typora画饼图、时序图、流程图、UML图和状态图吧
- web前端数据表格有合并项的一种简单实现方法
- 数据库技术之MVCC
- 使用Python在Excel表指定位置插入多列并赋值