在android 的Activity 中,两个Activity 中对象的传递。

通常我们使用意图来启动另一个Activity.如》Intent intent = new Intent(MainActivity.this,OtherActivity.class);

如果在两个Activity中传递数据就需要用到一个对象Bundle bun = new Bundle();

我们可以把Bundle 理解成一个容器,类似于map这样的东西。把"普通"对象放到里边,然后就可以在另一个Activity中获取该对象.

比方说:

              bun.putString("name","华仔");      bun.putInt("age", 18);
而在另一个Activity 中就可以用。

   Intent intent = this.getIntent();   String name = intent.getStringExtra("name");
就可以获取到值。这里所说的普通对象。

那么自定义对象在android中应该怎么实现呢。

我记得在java语言中。如果对象网络上传输就得实现序列化。自定义类需要实现 java.io.Serializable.

而在android 的应用中这样的方法同样可行代码如下。

package com.hkrt.domain;/**person 实体*/public class Person implements java.io.Serializable {private static final long serialVersionUID = -1115440875848739771L;private int id;private String name;private double money;public Person(String name, double money) {super();this.name = name;this.money = money;}public int getId() {return id;}public void setId(int id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public double getMoney() {return money;}public void setMoney(double money) {this.money = money;}@Overridepublic String toString() {return "Person [id=" + id + ", money=" + money + ", name=" + name + "]";}}

在android 中代码就可以用

 Person per = new Person("张三",5896.20); bun.putSerializable("person", per);
进行数据传递。

在另一个Activity 中就可以这样获取了。

Bundle  bun =  intent.getExtras();Person per =(Person)bun.getSerializable("person");

第二种方法。就是自定义数据对象实现android.os.Parcelable。译为:包裹

同样可以理解成容器。代码如下:

package com.hkrt.domain;import android.os.Parcel;import android.os.Parcelable;public class Student implements android.os.Parcelable {private String name;private int age;private double score;public Student() {super();}public Student(Parcel parcel) {name = parcel.readString();age = parcel.readInt();score = parcel.readDouble();}public Student(String name, int age, double score) {super();this.name = name;this.age = age;this.score = score;}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 double getScore() { return score;}public void setScore(double score) {this.score = score;}@Overridepublic int describeContents() {return 0;}@Overridepublic void writeToParcel(Parcel parcel, int flags) {parcel.writeString(name);parcel.writeInt(age);parcel.writeDouble(score);} public static final Parcelable.Creator<Student> CREATOR  = new Parcelable.Creator<Student>() { public Student createFromParcel(Parcel in) {     return new Student(in); } public Student[] newArray(int size) {     return new Student[size]; }};}
官方解释如下:

nterface for classes whose instances can be written to and restored from a Parcel. Classes implementing the Parcelable interface must also have a static field called CREATOR, which is an object implementing the Parcelable.Creator interface.

在android 的代码就可以这样写了。

   Student stu = new Student("李四", 20, 100.00);   bun.putParcelable("stu", stu);
而在另一个Activity中就可以获取到这个自定义对象Student.

Student stu = (Student)bun.getParcelable("stu");

结果图:

android 之对象传递_第1张图片



更多相关文章

  1. [转]SimpleCursorAdapter类与数据绑定
  2. Android音视频 - Camera+AudioRecord采集数据
  3. 抖音数据采集教程,Android群控黑盒调用,Sekiro使用手册
  4. [Android]使用Spring for Android改善数据交互流程
  5. 构建自己的Android代码托管服务器
  6. 打造android ORM框架opendroid(七)——数据库升级方案

随机推荐

  1. Python 为什么不支持 switch 语句?
  2. Python 疑难问题:[] 与 list() 哪个快?为什
  3. AWS上传证书-添加负载均衡
  4. 给你的Excel增加正则处理函数,简直如虎添
  5. 数据分析都有哪些岗位?
  6. 什么是好的数据指标:精益数据分析
  7. 为什么说 Python 内置函数并不是万能的?
  8. 如何处理偏态数据?
  9. SQL今日一题(6):count
  10. Python有序字典的两个小“惊喜”~~