Android开发笔记 Activity间的通讯

本文介绍了在Android中如何实现Activity间的通讯,特别是如何通过Intent传输自定义对象。包括实现Serializable接口、Parcelable接口的方式,以及一种巧妙的不依赖Serializable和Parcelable的方法。详细解释了每个方法的实现步骤和注意事项。

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

Android Activity间的通讯

本文参考文章
  众所周知,安卓Activity间通讯使用Intent传输数据.
例如

//构造Intent对象并绑定数据
Intent intent = new Intent(FirstActivity.this, SecondActivity.class);  
intent.putExtra("string_data", "hello");  
intent.putExtra("int_data", 100);  
startActivity(intent); 

//接收数据
getIntent().getStringExtra("string_data");  
getIntent().getIntExtra("int_data", 0);  

  像这种用法肯定很熟悉了.但是,上述方法使用Intent传输的数据类型是有限的,如果想用它来传输一个自定义的类型的对象,该怎么办呢?
  通过查找资料,使用Intent传输对象的方法如下:
  1.使对象实现Serializable接口
  将我们自定义的类实现了Serializbale接口后,像添加一个String对象那样将自定义类的实例绑定给Intent对象即可,在target Activity中通过调用

  getIntent.getSerializableExtra(String str);

  即可实现自定义对象的传输.
  2.使对象实现Parcelable接口
  这种方法使用起来较为复杂,Parcelable接口是将对象分成多个小部分,每一部分都应是能绑定到Intent中的对象类型.
  使用方法如下,具体实现可以参考原文

  首先我们让自定义类去实现了Parcelable 接口,这样就必须重写describeContents()和writeToParcel()这两个方法。
  其中describeContents()方法直接返回0就可以了,而writeToParcel()方法中我们需要调用Parcel的writeXxx()方法将自定义类中的字段一一写出。注意字符串型数据就调用writeString()方法,整型数据就调用writeInt()方法,以此类推。
  除此之外,我们还必须在自定义类中提供一个名为CREATOR的常量,这里创建了Parcelable.Creator 接口的一个实现。
  接着需要重写createFromParcel()和newArray()这两个方法,在createFromParcel()方法中我们要去读取刚才写出的类中的各字段,并创建一个对象进行返回,注意这里读取的顺序一定要和刚才写出的顺序完全相同。

  上述内容是参考了优快云的文章,我在GitHub上找到一个安卓的USBSerial的库,其中作者用了一种方法也实现了Activity间自定义对象的传送,我感觉很是巧妙,所以我将它记下.
  假设要从FirstActivity中将自定义类的MyClass的对象obj传送给SecondActivity.
  1.定义FirstActivity类并完成初始化

  public class FirstActivity extends CompatActivity{
      //...
      MyClass obj = new MyClass();
      //...
  }

  2.定义SecondActivity并完成初始化

  public class SecondActivity extends ConpatActivity{
      //这里需要static
      private static MyClass obj = null;
      //...
      //下面这个方法是关键
      public static void getMyClass(Context context, MyClass obj)
      {
          this.obj = obj;
          Intent intent = new Intent(context, SecondActivity.class);
          intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_NO_HISTORY);
          context.startActivity(intent);
      }
  }

  然后在FirstActivity中调用

SecondActivity.getMyClass(this, obj);

  就是这样子,不需要Serializable和Parcelable就实现了两个Activity间的自定义对象的传递.
  
  由于我的水平有限,有何不妥还望大家能不吝指正!谢谢!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值