`
wayfarer
  • 浏览: 297754 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

如何通过Intent传递一个Bean

阅读更多

1. 方法1

(1)BeanSerializable

public class BeanSerializable implements Serializable {
	private static final long serialVersionUID = 1L;
	
	private String name;
	private int age;
	private String address;
	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 getAddress() {
		return address;
	}
	public void setAddress(String address) {
		this.address = address;
	}
}

 (2)Sender

public class Sender extends Activity {
	private Button btn;
	
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.sender);
		btn = (Button) findViewById(R.id.sender_btn);
		btn.setOnClickListener(new OnClickListener() {
			public void onClick(View v) {
				BeanSerializable bean = new BeanSerializable();
				bean.setAddress("大学路195号");
				bean.setAge(25);
				bean.setName("Forrest");
				
				Intent intent = new Intent(Sender.this, Receiver.class);  
				intent.putExtra("PERSON_INFO", bean);  
				startActivity(intent);  
			}
		});
	}
}

  (3)Receiver

public class Receiver extends Activity {
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.receiver);
		Intent intent = getIntent();
		
		BeanSerializable bean = (BeanSerializable) intent.getSerializableExtra("PERSON_INFO");
		TextView tv = (TextView) findViewById(R.id.receiver_tv);
		tv.setText(bean.getName() + " / " + bean.getAddress() + " / " + String.valueOf(bean.getAge()));
	}
}
 

2. 方法2

(1)BeanParcelable

public class BeanParcelable implements Parcelable {

	private String name;
	private int age;
	private String address;

	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 getAddress() {
		return address;
	}

	public void setAddress(String address) {
		this.address = address;
	}

	@Override
	public int describeContents() {
		return 0;
	}

	@Override
	public void writeToParcel(Parcel dest, int flags) {
		dest.writeString(name);
		dest.writeInt(age);
		dest.writeString(address);
	}

	public static final Parcelable.Creator<BeanParcelable> CREATOR = new Creator<BeanParcelable>() {

		public BeanParcelable createFromParcel(Parcel source) {

			BeanParcelable bean = new BeanParcelable();
			bean.name = source.readString();
			bean.age = source.readInt();
			bean.address = source.readString();
			return bean;
		}

		public BeanParcelable[] newArray(int size) {
			return new BeanParcelable[size];
		}

	};
}

 (2)Sender

public class Sender extends Activity {
	private Button btn;
	
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.sender);
		btn = (Button) findViewById(R.id.sender_btn);
		btn.setOnClickListener(new OnClickListener() {
			public void onClick(View v) {
				BeanParcelable beanParcelable = new BeanParcelable();
				beanParcelable.setAddress("政立路545弄6号楼402");
				beanParcelable.setAge(25);
				beanParcelable.setName("Forrest");
				
				Intent intent = new Intent(Sender.this, Receiver.class);  
				intent.putExtra("PERSON_INFO", beanParcelable);  
				startActivity(intent);  
			}
		});
	}
}

 (3)Receiver

public class Receiver extends Activity {
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.receiver);
		Intent intent = getIntent();
		
		BeanParcelable beanParcelable = (BeanParcelable) intent.getParcelableExtra("PERSON_INFO");
		TextView tv = (TextView) findViewById(R.id.receiver_tv);
		tv.setText(beanParcelable.getName() + " / " + beanParcelable.getAddress() + " / " + String.valueOf(beanParcelable.getAge()));
	}
}

 

3. 注意事项

有些Bean是无法通过上面两种方法传递的。例如以Drawble[] photos;为参数的Bean,因为android的IO设计无法write Drawable,而只能writeString, writeInteger, writeFile等。所以我们就不直接传递Drawable[]参数,改而传递生成Drawable[]的数据,传递到了目的地再利用这些数据生成Drawable[]。就好像你要运输一架飞机,但你无法整机运输(传递),你只好先将飞机的各个零部件运输到目的地(这个是可以运输传递的),然后在目的地再将这些零部件组装成飞机。

分享到:
评论
1 楼 christensen 2011-06-26  
你的例子中没有传递drawable。骗人

相关推荐

    android序列化

    在实际应用中,当需要通过Intent传递复杂对象时,如自定义的Bean类,就需要使用`Parcelable`。通过实现`Parcelable`,你可以确保对象能够高效地在不同的组件(Activity、Service等)之间传递,或者在不同的进程中...

    aidlDemo实例

    `aidlDemo实例`是展示如何使用AIDL进行实际操作的一个典型示例,我们将深入探讨其操作步骤和调用方法,以及与之相关的bean的parcelable序列化。 首先,理解AIDL的基本概念至关重要。AIDL本质上是一种接口定义语言,...

    Android系统中的广播(Broadcast)机制简要介绍和学习计划

    广播通常通过Intent对象来传递信息,Intent不仅可以在同一个应用内部使用,也可以跨应用发送,增加了系统的灵活性和可扩展性。 广播机制在Android中之所以不可或缺,是因为它实现了发送者和接收者的松耦合。发送...

    MTK6589_Contacts源码(Android4.22)

    6. **Intent与BroadcastReceiver**:系统通过Intent传递事件,例如当新安装的应用请求访问联系人时,会发送一个广播。Contacts源码中可能包含BroadcastReceiver,监听并处理这些事件。 7. **数据模型**:源码会定义...

    Android 资料

    例如,你可以创建一个隐式Intent来打开网页链接,系统会根据URL数据类型找到合适的浏览器应用来处理。Intent还可以携带额外的数据,通过Bundle进行传递,以便在目标组件中使用。 【Android 面试题目及其答案大全】 ...

    FlyEventBus

    【FlyEventBus】是一个关于Android开发中的事件总线框架 EventBus 的实战应用,主要演示了如何在两个Activity之间高效地传递复杂的JavaBean对象。EventBus是一个轻量级的事件发布/订阅库,它简化了Android应用内的...

    EventBusApp

    接着,定义事件类(Event),通常是一个简单的Java Bean,包含需要传递的数据。发布事件时,只需调用EventBus的post方法,传入事件对象即可。订阅事件则通过在需要接收事件的方法上添加@Subscribe注解,并指定线程...

    GalleryView简单例子

    `GalleryView`是Android SDK中的一个旧组件,它在API level 16(Android 4.1 Jelly Bean)被废弃,推荐使用`RecyclerView`或`ViewPager`来代替。然而,对于较低版本的Android系统,我们仍然可以使用`GalleryView`。...

    android_parcelable_code_general

    该插件的使用方法通常是,当你创建了一个新的实体bean类并希望它支持`Parcelable`时,插件会自动帮你生成相关代码。这样,你无需手动编写这些重复且复杂的代码,可以更专注于业务逻辑。具体操作可能需要将插件集成到...

    java+andrdoid

    例如,一个简单的Android应用可能会使用Java的集合框架来存储和处理数据,同时利用Android的`Activity`和`Intent`来管理应用的生命周期和导航。 学习和掌握这两个API文档不仅需要阅读和理解文档内容,还需要通过...

    Android4.1ApiDemos最新

    在Android开发领域,ApiDemos是一个非常重要的参考资料,它是由Google官方提供的示例代码集合,用于演示Android SDK中的各种API功能。对于开发者来说,尤其是对Android 4.1(Jelly Bean)版本感兴趣的开发者,Api...

    Android组件间通信

    在Android应用开发中,组件间通信是至关重要的一个环节,它涉及到Activity、Service、BroadcastReceiver以及ContentProvider等四大组件之间的数据传递与交互。本篇将深入探讨Android组件间通信的概念、重要性以及一...

    android源代码

    在Android开发中,`android.jar`是一个至关重要的文件,它是Android SDK中的一个库,提供了Android API的类定义,但默认情况下并不包含源代码。这个文件允许开发者在Java层编写应用程序,而无需关心底层的C/C++实现...

    ApiDemosAndroid4.zip

    3. **意图(Intent)与广播(Broadcast)**:通过示例,你可以了解如何使用意图在组件间传递信息,以及如何注册和发送广播接收器,处理系统事件或自定义事件。 4. **服务(Service)**:ApiDemos展示了后台运行的...

    Android的MVC模式[归类].pdf

    在Android开发中,MVC(Model-View-Controller)模式是一种常见的架构设计方式,它将应用程序分为三个主要组件,以实现逻辑与展示的分离。以下是关于Android MVC模式的详细解释: 1. **模型层(Model)**:在这个...

    JavaEE6帮助文档英文版

    JavaEE6是企业级应用程序开发的一个重要框架,它是由Java Community Process(JCP)制定的一套标准,旨在简化企业级应用的开发和部署。这个压缩包包含两份关键的文档资源,分别是“Java-EE-6.chm”和“Android官方...

    格式正规的XML:语法 属性 实体 处理指令 样式单 CDATA节 - 圣骑士wind - 博客园1

    一个标准的XML文档通常以`&lt;?xml version="1.0"?&gt;`作为开头,声明XML的版本。接着是文档的根元素,例如`&lt;Student&gt;`,在本例中表示学生信息。元素以尖括号包围,如`&lt;Name&gt;`和`&lt;ID&gt;`,并且元素可以嵌套。每个元素可以有...

    安卓开发-客户端文档及demo_Android(20130328).zip.zip

    这个压缩包文件“安卓开发-客户端文档及demo_Android(20130328).zip.zip”显然是一个关于Android应用开发的资源集合,包含了文档和演示示例。尽管标签部分为空,我们可以从文件名推测其内容主要针对的是2013年3月28...

    AndroidAPI文档(CHM)

    CHM文件是一种由Microsoft开发的帮助文件格式,它可以将大量的HTML页面、图像和其他资源打包成一个单一的文件,便于查看和离线使用。在这个名为"Android.4.1.documentation-1.1.chm"的文件中,开发者可以找到关于...

    from-java-to-kotlin.zip

    扩展函数是Kotlin的一个独特特性,允许在不修改原有类的情况下为其添加新功能,这是Java无法做到的。 4. **高阶函数与Lambda表达式** Kotlin鼓励使用高阶函数和Lambda表达式,使得代码更加简洁和易读。Java 8虽然...

Global site tag (gtag.js) - Google Analytics