我们可以借助Intent来启动活动、发送广播、启动服务等,在进行上述操作时,我们还能在Intent中添加一些附加数据,已达传值的效果,比如下面的代码:
MainActivity

  Intent intent = new Intent(MainActivity.this, SecondActivity.class);intent.putExtra("name", "xiaoming");intent.putExtra("age", 17);startActivity(intent);

SecondActivity可以得到这些值:

  getIntent().getStringExtra("name");getIntent().getIntExtra("age", 0);

这里只是利用Intent传递一些值,如何传递对象呢?

有两种方式,一种是Serializable方式,另一种是Parcelable方式。

Serializable是序列化的意思,表示将一个对象转换成可存储或者可传输的状态。序列化后的对象可以在网络上进行传输,也可以存储到本地。序列化方法很简单,只需要让一个类去实现Serializable这个接口就可以了。
比如一个Animal类,其中包含了type,sex这两个字段,代码如下:

  public class Animal implements Serializable{    private String type;    private String sex;    public String getType()    {        return type;    }    public void setType(String type)    {        this.type = type;    }    public Stirng getSex()    {        return sex;    }    public void setSex(String sex)    {        this.sex = sex;    }}

MainActivty.java

  Animal animal = new Animal();animal.setType("panda");animal.setSex("male");Intent intent = new Intent(MainActivity.this, SecondActivity.class);intent,putExtra("animal_panda", animal);startActivity(intent);

SecondActivity.java

  Animal animal = (Animal)getIntent().getSerializableExtra(animal_panda);

这里调用了getSerializableExtra()方法获取通过参数传递过来的序列化对象,接着再将它向下转型成Person对下岗,这样我们就成功实现了使用Intent来传递对象的功能了。

除了Serializable之外,使用Parcelable也可以实现相同的效果,不过不同于将对象进行序列化,Parcelable方式的实现原理是将一个完整的对象进行分解,而分解后的每一部分都是Intent所支持的数据类型,这样就实现传递对象的功能了。

  public class Animal implements Serializable{    private String type;    private String sex;    public String getType()    {        return type;    }    public void setType(String type)    {        this.type = type;    }    public Stirng getSex()    {        return sex;    }    public void setSex(String sex)    {        this.sex = sex;    }    @Override    public int describeContents()    {        return 0;    }    @Override    public void writeToParcel(Parcel dest, int flags)    {        dest.writeString(type);        dest.writeString(sex);    }    public static final Parcelable.Creator<Animal> CREATOR = new Parcelable.Creator<Animal>()    {        @Override        public Animal createFromParcel(Parcel source)        {            Animal animal = new Animal();            animal.type = source.readStirng();            animal.sex = source.readString();            return animal;        }        @Override         public Aniaml[] newArray(int size)        {            return new Animal[size];        }    }}

SecondActivity.java

  Animal animal = (Animal)getIntent.getParcelableExtra(animal-panda);

存在即理由,Parcelable方式虽然复杂,但效率更高,一般推荐使用Parcelable方式来实现Intent传递的功能。

作者:CodeEmperor 发表于2015/8/13 11:46:12 原文链接 阅读:228 评论:0 查看评论

更多相关文章

  1. Button监听方式
  2. Android判断Activity是否全屏的方式!!!(最全)
  3. android sqlite使用之模糊查询数据库数据的三种方式
  4. android绑定点击事件的四种方法
  5. 【Android】Intent传递数据量过大的问题android.os.TransactionT
  6. Android优化之内存优化
  7. Android调用第三方app(Scheme隐式以及显示调用)
  8. Android动画-概述
  9. Android数据库开源框架GreenDao分析

随机推荐

  1. android源码/内核下载
  2. android静默安装的实现(一)
  3. Android项目中集成React Native
  4. android 4.0 编译模式 eng -- > user 时
  5. 如何理解、使用Android(安卓)LogCat以及
  6. Android的驱动程序(一)
  7. Android - Android 的消息机制
  8. Android Intent的几种用法全面总结
  9. 如何用Android(安卓)Studio打多包名APK
  10. Android(安卓)Frame动画demo