最新消息:欢迎访问Android开发中文站!商务联系微信:loading_in

Android之Activity之间传递对象

新手入门 AndroidChina 2787浏览 0评论

在很多时候,我们需要在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&lt;Student&gt; CREATOR = new Creator&lt;Student&gt;() {<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之间传递对象

您必须 登录 才能发表评论!