当前位置: 代码迷 >> 移动开发 >> 应用意图在Activity之间传递数据小插曲_传递对象
  详细解决方案

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

热度:7586   发布时间:2013-02-26 00:00:00.0
使用意图在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>



  相关解决方案