Android之Activity之间传递对象

本文介绍如何在Android应用的不同Activity间通过Serializable和Parcelable接口传递Teacher和Student对象,并提供实现示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在非常多时候,我们须要在Activity之间传递对象,比方当你点击了某列表的item,须要传递给下一个Activity该对象,那我们须要该怎么做呢?


Android支持两种传递对象的方式。一种是bundle.putSerializable方式,一种是bundle.putParcelable。


那么以下我们就用一个样例来实践Activity传递对象:


1.首先建立两个类,一个Teacher类表示老师,一个Student类表示学生。内容分别例如以下:

<span style="font-size:18px;">public class Teacher implements Serializable {

	private static final long serialVersionUID = -7060210544600464481L;

	private String name;
	private int age;
	private String addr;

	public Teacher(String name, int age, String addr) {
		super();
		this.name = name;
		this.age = age;
		this.addr = addr;
	}

	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 getAddr() {
		return addr;
	}

	public void setAddr(String addr) {
		this.addr = addr;
	}

	@Override
	public String toString() {
		String temp = "老师姓名:" + this.name + " 年龄:" + this.age + " 地址:"
				+ this.addr;
		return temp;
	}

}</span>


<span style="font-size:18px;">import android.os.Parcel;
import android.os.Parcelable;

public class Student implements Parcelable {

	private String name;
	private int age;
	private String addr;

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

		@Override
		public Student[] newArray(int size) {
			return new Student[size];
		}

		@Override
		public Student createFromParcel(Parcel source) {
			Student stu = new Student();
			stu.name = source.readString();
			stu.age = source.readInt();
			stu.addr = source.readString();
			return stu;
		}
	};

	@Override
	public int describeContents() {
		// TODO Auto-generated method stub
		return 0;
	}

	@Override
	public void writeToParcel(Parcel dest, int flags) {
		dest.writeString(name);
		dest.writeInt(age);
		dest.writeString(addr);
	}
	
	public Student(){
		
	}
	
	public Student(String name, int age, String addr) {
		super();
		this.name = name;
		this.age = age;
		this.addr = addr;
	}

	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 getAddr() {
		return addr;
	}

	public void setAddr(String addr) {
		this.addr = addr;
	}
	
	@Override
	public String toString() {
		String temp = "学生姓名:" + this.name + " 年龄:" + this.age + " 地址:"
				+ this.addr;
		return temp;
	}
	
}</span>


当中Teacher类实现了Serializable接口,Student类实现了Parcelable接口。


2.创建两个Activity,第一个Activity叫做FirstActivity。它里面有两个对象:一个Teacher对象,一个Student对象,我们如今须要将这两个对象传递给第二个Activity。即SecondActivity。


首先我们看一下FirstActivity的布局:



FirstActivity的内容例如以下:

import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;

public class FirstActivity extends Activity implements OnClickListener{
	
	public static final String TEACHER_KEY = "key_teacher";
	public static final String STUDENT_KEY = "key_student";
	
	private Teacher teacher = new Teacher("刘备", 36, "荆州");
	private Student student = new Student("张飞", 32, "新野");
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_first);
		
		findViewById(R.id.button1).setOnClickListener(this);
	}

	@Override
	public void onClick(View v) {
		switch (v.getId()) {
		case R.id.button1:
			Bundle bundle = new Bundle();
			bundle.putSerializable(TEACHER_KEY, teacher);
			bundle.putParcelable(STUDENT_KEY, student);
			Intent intent = new Intent(FirstActivity.this,SecondActivity.class);
			intent.putExtras(bundle);
			startActivity(intent);
			break;

		default:
			break;
		}
		
	}

}



然后我们再看一下SecondActivity的布局:


里面就仅仅有一个TextView。


然后我们看一下SecondActivity的内容,它主要是将传递过来的对象显示到TextView其中:

import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.view.Menu;
import android.widget.TextView;

public class SecondActivity extends Activity {

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_second);
		
		Intent intent = this.getIntent();
		Bundle bundle = intent.getExtras();
		Teacher t = (Teacher) bundle.getSerializable(FirstActivity.TEACHER_KEY);
		Student s = bundle.getParcelable(FirstActivity.STUDENT_KEY);
		
		String text = t.toString() + "\n" + s.toString();
		
		((TextView)findViewById(R.id.text_view)).setText(text);
	}


}

当我们点击了FirstActivity的界面上的"開始传递对象"button后,跳转到SecondActivity,界面例如以下:



非常显然,这两种方式都能够成功的在Activity之间传递对象。


希望以上内容对各位读者可以带来帮助!

世界地图矢量数据可以通过多种网站进行下载。以下是一些提供免费下载世界地图矢量数据的网站: 1. Open Street Map (https://www.openstreetmap.org/): 这个网站可以根据输入的经纬度或手动选定范围来导出目标区域的矢量图。导出的数据格式为osm格式,但只支持矩形范围的地图下载。 2. Geofabrik (http://download.geofabrik.de/): Geofabrik提供按洲际和国家快速下载全国范围的地图数据数据格式支持shape文件格式,包含多个独立图层,如道路、建筑、水域、交通、土地利用分类、自然景观等。数据每天更新一次。 3. bbbike (https://download.bbbike.org/osm/): bbbike提供全球主要的200多个城市的地图数据下载,也可以按照bbox进行下载。该网站还提供全球数据数据格式种类齐全,包括geojson、shp等。 4. GADM (https://gadm.org/index.html): GADM提供按国家或全球下载地图数据的服务。该网站提供多种格式的数据下载。 5. L7 AntV (https://l7.antv.antgroup.com/custom/tools/worldmap): L7 AntV是一个提供标准世界地图矢量数据免费下载的网站。支持多种数据格式下载,包括GeoJSON、KML、JSON、TopJSON、CSV和高清SVG格式等。可以下载中国省、市、县的矢量边界和世界各个国家的矢量边界数据。 以上这些网站都提供了世界地图矢量数据免费下载服务,你可以根据自己的需求选择合适的网站进行下载
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值