在很多时候,我们需要在Activity之间传递对象,比如当你点击了某列表的item,需要传递给下一个Activity该对象,那我们需要该怎么做呢?
Android支持两种传递对象的方式,一种是bundle.putSerializable方式,一种是bundle.putParcelable。
那么下面我们就用一个例子来实践Activity传递对象:
1.首先建立两个类,一个Teacher类表示老师,一个Student类表示学生。内容分别如下:
<br />public class Teacher implements Serializable {<br /><br /><%%KEEPWHITESPACE%%> private static final long serialVersionUID = -7060210544600464481L;<br /><br /><%%KEEPWHITESPACE%%> private String name;<br /><%%KEEPWHITESPACE%%> private int age;<br /><%%KEEPWHITESPACE%%> private String addr;<br /><br /><%%KEEPWHITESPACE%%> public Teacher(String name, int age, String addr) {<br /><%%KEEPWHITESPACE%%> super();<br /><%%KEEPWHITESPACE%%> this.name = name;<br /><%%KEEPWHITESPACE%%> this.age = age;<br /><%%KEEPWHITESPACE%%> this.addr = addr;<br /><%%KEEPWHITESPACE%%> }<br /><br /><%%KEEPWHITESPACE%%> public String getName() {<br /><%%KEEPWHITESPACE%%> return name;<br /><%%KEEPWHITESPACE%%> }<br /><br /><%%KEEPWHITESPACE%%> public void setName(String name) {<br /><%%KEEPWHITESPACE%%> this.name = name;<br /><%%KEEPWHITESPACE%%> }<br /><br /><%%KEEPWHITESPACE%%> public int getAge() {<br /><%%KEEPWHITESPACE%%> return age;<br /><%%KEEPWHITESPACE%%> }<br /><br /><%%KEEPWHITESPACE%%> public void setAge(int age) {<br /><%%KEEPWHITESPACE%%> this.age = age;<br /><%%KEEPWHITESPACE%%> }<br /><br /><%%KEEPWHITESPACE%%> public String getAddr() {<br /><%%KEEPWHITESPACE%%> return addr;<br /><%%KEEPWHITESPACE%%> }<br /><br /><%%KEEPWHITESPACE%%> public void setAddr(String addr) {<br /><%%KEEPWHITESPACE%%> this.addr = addr;<br /><%%KEEPWHITESPACE%%> }<br /><br /><%%KEEPWHITESPACE%%> @Override<br /><%%KEEPWHITESPACE%%> public String toString() {<br /><%%KEEPWHITESPACE%%> String temp = "老师姓名:" + this.name + " 年龄:" + this.age + " 地址:" + this.addr;<br /><%%KEEPWHITESPACE%%> return temp;<br /><%%KEEPWHITESPACE%%> }<br /><br />}<br />
<br />import android.os.Parcelable;<br /><br />public class Student implements Parcelable {<br /><br /><%%KEEPWHITESPACE%%> private String name;<br /><%%KEEPWHITESPACE%%> private int age;<br /><%%KEEPWHITESPACE%%> private String addr;<br /><br /><%%KEEPWHITESPACE%%> public static final Parcelable.Creator<Student> CREATOR = new Creator<Student>() {<br /><br /><%%KEEPWHITESPACE%%> @Override<br /><%%KEEPWHITESPACE%%> public Student[] newArray(int size) {<br /><%%KEEPWHITESPACE%%> return new Student[size];<br /><%%KEEPWHITESPACE%%> }<br /><br /><%%KEEPWHITESPACE%%> @Override<br /><%%KEEPWHITESPACE%%> public Student createFromParcel(Parcel source) {<br /><%%KEEPWHITESPACE%%> Student stu = new Student();<br /><%%KEEPWHITESPACE%%> stu.name = source.readString();<br /><%%KEEPWHITESPACE%%> stu.age = source.readInt();<br /><%%KEEPWHITESPACE%%> stu.addr = source.readString();<br /><%%KEEPWHITESPACE%%> return stu;<br /><%%KEEPWHITESPACE%%> }<br /><%%KEEPWHITESPACE%%> };<br /><br /><%%KEEPWHITESPACE%%> @Override<br /><%%KEEPWHITESPACE%%> public int describeContents() {<br /><%%KEEPWHITESPACE%%> // TODO Auto-generated method stub<br /><%%KEEPWHITESPACE%%> return 0;<br /><%%KEEPWHITESPACE%%> }<br /><br /><%%KEEPWHITESPACE%%> @Override<br /><%%KEEPWHITESPACE%%> public void writeToParcel(Parcel dest, int flags) {<br /><%%KEEPWHITESPACE%%> dest.writeString(name);<br /><%%KEEPWHITESPACE%%> dest.writeInt(age);<br /><%%KEEPWHITESPACE%%> dest.writeString(addr);<br /><%%KEEPWHITESPACE%%> }<br /><br /><%%KEEPWHITESPACE%%> public Student(){<br /><br /><%%KEEPWHITESPACE%%> }<br /><br /><%%KEEPWHITESPACE%%> public Student(String name, int age, String addr) {<br /><%%KEEPWHITESPACE%%> super();<br /><%%KEEPWHITESPACE%%> this.name = name;<br /><%%KEEPWHITESPACE%%> this.age = age;<br /><%%KEEPWHITESPACE%%> this.addr = addr;<br /><%%KEEPWHITESPACE%%> }<br /><br /><%%KEEPWHITESPACE%%> public String getName() {<br /><%%KEEPWHITESPACE%%> return name;<br /><%%KEEPWHITESPACE%%> }<br /><br /><%%KEEPWHITESPACE%%> public void setName(String name) {<br /><%%KEEPWHITESPACE%%> this.name = name;<br /><%%KEEPWHITESPACE%%> }<br /><br /><%%KEEPWHITESPACE%%> public int getAge() {<br /><%%KEEPWHITESPACE%%> return age;<br /><%%KEEPWHITESPACE%%> }<br /><br /><%%KEEPWHITESPACE%%> public void setAge(int age) {<br /><%%KEEPWHITESPACE%%> this.age = age;<br /><%%KEEPWHITESPACE%%> }<br /><br /><%%KEEPWHITESPACE%%> public String getAddr() {<br /><%%KEEPWHITESPACE%%> return addr;<br /><%%KEEPWHITESPACE%%> }<br /><br /><%%KEEPWHITESPACE%%> public void setAddr(String addr) {<br /><%%KEEPWHITESPACE%%> this.addr = addr;<br /><%%KEEPWHITESPACE%%> }<br /><br /><%%KEEPWHITESPACE%%> @Override<br /><%%KEEPWHITESPACE%%> public String toString() {<br /><%%KEEPWHITESPACE%%> String temp = "学生姓名:" + this.name + " 年龄:" + this.age + " 地址:" + this.addr;<br /><%%KEEPWHITESPACE%%> return temp;<br /><%%KEEPWHITESPACE%%> }<br /><br />}<br />
其中Teacher类实现了Serializable接口,Student类实现了Parcelable接口。
2.创建两个Activity,第一个Activity叫做FirstActivity,它里面有两个对象:一个Teacher对象,一个Student对象,我们现在需要将这两个对象传递给第二个Activity,即SecondActivity。
首先我们看一下FirstActivity的布局:
FirstActivity的内容如下:
<br />import android.os.Bundle;<br />import android.app.Activity;<br />import android.content.Intent;<br />import android.view.Menu;<br />import android.view.View;<br />import android.view.View.OnClickListener;<br /><br />public class FirstActivity extends Activity implements OnClickListener{<br /><br /><%%KEEPWHITESPACE%%> public static final String TEACHER_KEY = "key_teacher";<br /><%%KEEPWHITESPACE%%> public static final String STUDENT_KEY = "key_student";<br /><br /><%%KEEPWHITESPACE%%> private Teacher teacher = new Teacher("刘备", 36, "荆州");<br /><%%KEEPWHITESPACE%%> private Student student = new Student("张飞", 32, "新野");<br /><br /><%%KEEPWHITESPACE%%> @Override<br /><%%KEEPWHITESPACE%%> protected void onCreate(Bundle savedInstanceState) {<br /><%%KEEPWHITESPACE%%> super.onCreate(savedInstanceState);<br /><%%KEEPWHITESPACE%%> setContentView(R.layout.activity_first);<br /><br /><%%KEEPWHITESPACE%%> findViewById(R.id.button1).setOnClickListener(this);<br /><%%KEEPWHITESPACE%%> }<br /><br /><%%KEEPWHITESPACE%%> @Override<br /><%%KEEPWHITESPACE%%> public void onClick(View v) {<br /><%%KEEPWHITESPACE%%> switch (v.getId()) {<br /><%%KEEPWHITESPACE%%> case R.id.button1:<br /><%%KEEPWHITESPACE%%> Bundle bundle = new Bundle();<br /><%%KEEPWHITESPACE%%> bundle.putSerializable(TEACHER_KEY, teacher);<br /><%%KEEPWHITESPACE%%> bundle.putParcelable(STUDENT_KEY, student);<br /><%%KEEPWHITESPACE%%> Intent intent = new Intent(FirstActivity.this,SecondActivity.class);<br /><%%KEEPWHITESPACE%%> intent.putExtras(bundle);<br /><%%KEEPWHITESPACE%%> startActivity(intent);<br /><%%KEEPWHITESPACE%%> break;<br /><br /><%%KEEPWHITESPACE%%> default:<br /><%%KEEPWHITESPACE%%> break;<br /><%%KEEPWHITESPACE%%> }<br /><br /><%%KEEPWHITESPACE%%> }<br /><br />}<br />然后我们再看一下SecondActivity的布局:
里面就只有一个TextView。然后我们看一下SecondActivity的内容,它主要是将传递过来的对象显示到TextView当中:
<br />import android.os.Bundle;<br />import android.app.Activity;<br />import android.content.Intent;<br />import android.view.Menu;<br />import android.widget.TextView;<br /><br />public class SecondActivity extends Activity {<br /><br /><%%KEEPWHITESPACE%%> @Override<br /><%%KEEPWHITESPACE%%> protected void onCreate(Bundle savedInstanceState) {<br /><%%KEEPWHITESPACE%%> super.onCreate(savedInstanceState);<br /><%%KEEPWHITESPACE%%> setContentView(R.layout.activity_second);<br /><br /><%%KEEPWHITESPACE%%> Intent intent = this.getIntent();<br /><%%KEEPWHITESPACE%%> Bundle bundle = intent.getExtras();<br /><%%KEEPWHITESPACE%%> Teacher t = (Teacher) bundle.getSerializable(FirstActivity.TEACHER_KEY);<br /><%%KEEPWHITESPACE%%> Student s = bundle.getParcelable(FirstActivity.STUDENT_KEY);<br /><br /><%%KEEPWHITESPACE%%> String text = t.toString() + "\n" + s.toString();<br /><br /><%%KEEPWHITESPACE%%> ((TextView)findViewById(R.id.text_view)).setText(text);<br /><%%KEEPWHITESPACE%%> }<br /><br />}<br />当我们点击了FirstActivity的界面上的”开始传递对象”按钮后,跳转到SecondActivity,界面如下:
很显然,这两种方式都可以成功的在Activity之间传递对象。
希望以上内容对各位读者能够带来帮助!
转载请注明:Android开发中文站 » Android之Activity之间传递对象