`
yidongkaifa
  • 浏览: 4060956 次
文章分类
社区版块
存档分类
最新评论

使用意图在Activity之间传递数据小插曲__传递对象

 
阅读更多
Android中Intent中如何传递对象有两种方法,一种是Bundle.putSerializable(Key,Object);另一种是Bundle.putParcelable(Key, Object);当然这些Object是有一定的条件的,前者是实现了Serializable接口,而后者是实现了Parcelable接口,通过一个简单的例子来给大家讲解一下。

工程结构图:

运行结果截图:
mainActivity截图

SerialActivity截图

ParcelActivity截图

Book.java:
package com.intent.bean;

import android.os.Parcel;
import android.os.Parcelable;

public class Book implements Parcelable {
	private String bookName;
	private String author;
	private int publishTime;

	public String getBookName() {
		return bookName;
	}

	public void setBookName(String bookName) {
		this.bookName = bookName;
	}

	public String getAuthor() {
		return author;
	}

	public void setAuthor(String author) {
		this.author = author;
	}

	public int getPublishTime() {
		return publishTime;
	}

	public void setPublishTime(int publishTime) {
		this.publishTime = publishTime;
	}

	// 实例化静态内部对象CREATOR实现接口Parcelable.Creator
	public static final Parcelable.Creator<Book> CREATOR = new Parcelable.Creator<Book>() {
		// 将Parcel对象反序列化为Book
		public Book createFromParcel(Parcel source) {
			Book mBook = new Book();
			mBook.bookName = source.readString();
			mBook.author = source.readString();
			mBook.publishTime = source.readInt();
			return mBook;
		}

		public Book[] newArray(int size) {
			return new Book[size];
		}
	};
	
	@Override
	public int describeContents() {
		return 0;
	}

	// 实现Parcelable的方法writeToParcel,将Book序列化为一个Parcel对象
	@Override
	public void writeToParcel(Parcel parcel, int flags) {
		parcel.writeString(bookName);
		parcel.writeString(author);
		parcel.writeInt(publishTime);
	}
}

Person.java:
package com.intent.bean;

import java.io.Serializable;

public class Person implements Serializable {
	private static final long serialVersionUID = -7060210544600464481L;
	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;
	}
}

MainActivity.java:
package com.intent.activity;

import com.intent.bean.Book;
import com.intent.bean.Person;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class MainActivity extends Activity implements OnClickListener {
	private Button btn_serial;
	private Button btn_parcel;
	public final static String SER_KEY = "com.intent.activity.ser";
	public final static String PAR_KEY = "com.intent.activity.par";

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		setupViews();
	}

	// 我的一贯作风呵呵
	public void setupViews() {
		btn_serial = (Button) findViewById(R.id.btOpenSerialActivity);
		btn_serial.setOnClickListener(this);
		btn_parcel = (Button) findViewById(R.id.btOpenParcelActivity);
		btn_parcel.setOnClickListener(this);
	}

	// Serializeable传递对象的方法
	public void SerializeMethod() {
		Person mPerson = new Person();
		mPerson.setName("wulianghuan");
		mPerson.setAge(22);
		Intent mIntent = new Intent(this, SerialActivity.class);
		Bundle mBundle = new Bundle();
		mBundle.putSerializable(SER_KEY, mPerson);
		mIntent.putExtras(mBundle);
		startActivity(mIntent);
	}

	// Pacelable传递对象方法
	public void PacelableMethod() {
		Book mBook = new Book();
		mBook.setBookName("Think in java");
		mBook.setAuthor("stven");
		mBook.setPublishTime(2010);
		Intent mIntent = new Intent(this, ParcelActivity.class);
		Bundle mBundle = new Bundle();
		mBundle.putParcelable(PAR_KEY, mBook);
		mIntent.putExtras(mBundle);
		startActivity(mIntent);
	}

	// 铵钮点击事件响应
	public void onClick(View v) {
		if (v == btn_serial) {
			SerializeMethod();
		} else {
			PacelableMethod();
		}
	}
}

SerialActivity.java:
package com.intent.activity;

import com.intent.bean.Person;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;

public class SerialActivity extends Activity {
	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		TextView mTextView = new TextView(this);
		Person mPerson = (Person) getIntent().getSerializableExtra(MainActivity.SER_KEY);
		mTextView.setText("name: " + mPerson.getName() + " , "
				+ "age: " + mPerson.getAge());
		setContentView(mTextView);
	}
}

ParcelActivity.java:
package com.intent.activity;

import com.intent.bean.Book;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;

public class ParcelActivity extends Activity {
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		TextView mTextView = new TextView(this);
		Book mBook = (Book) getIntent().getParcelableExtra(MainActivity.PAR_KEY);
		mTextView.setText("name: " + mBook.getBookName() + " , "
				+ "Author: " + mBook.getAuthor() + " , " + "PublishTime: "
				+ mBook.getPublishTime());
		setContentView(mTextView);
	}
}

res/layout/main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >
    
    <Button 
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/btOpenSerialActivity"
        android:text="使用意图传递Serializable对象"/>
    
    <Button 
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/btOpenParcelActivity"
        android:text="使用意图传递Parcelable对象"/>

</LinearLayout>


AndroidManifest.xml文件(将两个新增的Activity,SerialActivity,ParcelActivity)声明一下 :
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.intent.activity"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk android:minSdkVersion="8" />

    <application
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name" >
        <activity
            android:label="@string/app_name"
            android:name=".MainActivity" >
            <intent-filter >
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity android:name=".SerialActivity"/>
    </application>

</manifest>



分享到:
评论

相关推荐

    android使用意图传递数据

    这是一个ppt文档,在里面详细的帮我们介绍了在Activity之间传递数据,通过全局变量传递数据。

    Activity之间的数据传递

    Android中Activity之间的数据传递使用很频繁。而最常用的方式便是使用意图Intent传递,从一个界面传递到目标界面,或者从第一个界面传递到第二个界面,再回传给第一个界面。

    关于Android Activity之间传递数据的6种方式

    使用Inten的putExtra传递 第一个Activity中 //创建意图对象 Intent intent = new Intent(this,TwoActivity.class); //设置传递键值对 intent.putExtra(data,str); //激活意图 startActivity(intent); 第二个...

    Android通过Intent传递数据

    我们可以通过Intent类中的putExtra方法可以将简单的数据类型和序列化对象保存到Intent对象中,然后在目标的Activity中使用getXxx方法取出对应的数据。

    黑马安卓基础教程day5 (总共day8)

    黑马安卓基础 总共8天教程。...52_activity之间传递数据&批量传递数据.avi 53_启动activity并且获取他的返回值.avi 54_activity的生命周期01.avi 54_activity的生命周期02.avi 55_切换屏幕activity生命周期的处理.avi

    Android开发指南

    类似的,一个意图能被传递给Context.bindService() 来在调用组件和一个目标服务之间建立连接。作为一个可选项,它可以发起这个服务如果还没运行的话。 • 传递给任意广播方法(例如Context.sendBroadcast(),Context....

    Android Activity的跳转与传值详解

    Activity跳转与传值,主要是通过Intent类来连接多个Activity,以及传递数据。  Intent是Android一个很重要的类。Intent直译是“意图”,什么是意图呢?比如你想从这个Activity跳转到另外一个Activity,这就是一个...

    实验四-Android基本组件交互实验.doc

    因此Android提供了Intent (意图) ,Intent提供了一种通用的消息系统,将要执行的动作的抽象的描述,一般来说是作为 参数来使用,由Intent来协助完成Android各个组件之间的通讯 。 Intent属性: Action ,对执行动作...

    Android学习之Intent中显示意图和隐式意图的用法实例分析

    Intent负责对应用中一次操作的动作、动作涉及数据、附加数据进行描述,Android则根据此Intent的描述,负责找到对应的组件,将 Intent传递给调用的组件,并完成组件的调用。 因此,Intent在这里起着一个媒体中介的...

    Android实验报告生命周期.doc

    Android 开发 (实验四) 实验题目:Activity生命周期验证试验 指导老师: 班 级:计算机...//创建意图对象 //使用意图对象打开一个新的Activity startActivity(intent); } } } AlcActivity.java package com.wr; imp

    Android之简单的BMI计算器(运用两个界面跳转显示)

    Intent是意图组件,是程序各组件进行交互的一种重要方式,它不仅可以指定当前组件要执行的动作,还可以在不同组件之间进行数据传输。 Intent被分为显式意图和隐式意图 显式意图 显式意图可以直接通过名称开启指定的...

    Android典型技术模块开发详解

    3.4.2 Activity传递对象类型 3.4.2 Activity回传数据 3.5 Activity加载模式 3.6 本章小结 第4章 Intent (意图) 4.1 显式Intent 4.2 隐式Intent 4.2.1 IntentFilter 4.2.2 调用系统组件 4.3 本章小结 第5章 ...

    老罗android视频开发源码和ppt经典

    1.5 android使用全局变量传递数据 1.6 android使用剪切板传递数据 1.7 意图传递数据的第一种方式 1.8 android使用静态变量传递数据 1.9 意图返回结果 二、Android常用布局介绍 2.1 android常用布局属性的介绍 2.2 ...

    Android学习笔记–Activity中使用Intent传值示例代码

    Intent,又称为意图,是一种运行时绑定机制,它能在程序运行的过程中链接两个不同的组件(Activity、Service、BroadcastReceiver)。通过Intent,程序可以向Android表达某种请求或意愿,Android会根据意愿的内容选择...

    Android编程四大组件之Activity用法实例分析

    2.在AndroidManifest.xml的节点中声明&lt;activity&gt; 显式意图创建Activity三种方式方式 //第一种方式:构造函数,代码少 Intent intent1 =new Intent(this,NewActivity.class); startActivity(intent1); //第二种方式...

    与其他应用程序进行交互 - Interacting with Other Apps.

    把用户从一个Activity带到另一个Activity,必须使用一个Intent去指定你的应用程序“意图”去做的事。当你用startActivity()函数向系统传递一个Intent,系统就会利用这个Intent去界定和开启对应的应用程序组件。使用...

    Android入门到精通源代码.

    7.1.2 Activity之间的消息传递 7.2 Intent的分类 7.2.1 Action Intent 7.2.2 Broadcast Intent 7.3 解析Intent的实现 7.3.1 Intent Receiver 7.3.2 Intent Filter 7.4 设置Activity许可 7.5 应用实例详解:电话拨号...

    IntentMonitor:基于工具的 xposed 可以监控 android 意图

    意图监视器一个基于 xposed 的工具,可以监控安卓意图它挂钩了一些方法,如 startActivity sendBroadCast startService ...

    星座说明书

    同时,数据的传送是通过意图传递的。默认的文本框中,选择的是白羊座。要选择其他的星座时,可单击文本框右边的那个倒三角,可以弹出一个下拉菜单列表框,然后从中选择你需要查询的星座。最后,单击按钮确认,进行...

    ActivityStarter:简单的Android库,提供了使用参数启动Activity的简便方法

    因此,您可以: 消除所有putExtra和getXXXExtra方法忘记用于传递参数的所有键(除非您想定义自定义一次) 开始喜欢开始标记和意图创建媒体:完整文档位于。 这是目录: 随时了解有关图书馆的新闻例使用...

Global site tag (gtag.js) - Google Analytics