Android 高手进阶教程:[15]传递对象方法
在 Android 开发中,数据传递是一个非常重要的环节。无论是从一个 Activity 传递到另一个 Activity,还是在同一个 Activity 中的不同 Fragment 之间共享数据,掌握正确的传递对象的方法都是必不可少的技能。本文将深入探讨几种常见的对象传递方式,并结合实际案例帮助你更好地理解和应用这些技术。
1. 使用 Intent 传递对象
Intent 是 Android 中用于在不同组件之间传递数据的核心机制之一。对于简单的数据类型(如字符串、整数等),可以直接通过 putExtra() 方法添加到 Intent 中。然而,当需要传递自定义对象时,则需要确保该对象实现了 Serializable 或 Parcelable 接口。
实现 Serializable 接口
```java
public class Person implements Serializable {
private String name;
private int age;
// 构造函数与 getter/setter 省略
}
```
然后,在发送方:
```java
Person person = new Person("John", 30);
Intent intent = new Intent(this, TargetActivity.class);
intent.putExtra("person", person);
startActivity(intent);
```
接收方可以通过 getIntent().getSerializableExtra() 获取对象:
```java
Person receivedPerson = (Person) getIntent().getSerializableExtra("person");
```
使用 Parcelable 接口
相比 Serializable,Parcelable 提供了更高的性能,尤其是在大量数据传递时。以下是实现步骤:
```java
public class Person implements Parcelable {
private String name;
private int age;
protected Person(Parcel in) {
name = in.readString();
age = in.readInt();
}
public static final Creator
@Override
public Person createFromParcel(Parcel in) {
return new Person(in);
}
@Override
public Person[] newArray(int size) {
return new Person[size];
}
};
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(name);
dest.writeInt(age);
}
}
```
发送和接收过程类似,只是需要使用 putParcelable 和 getParcelableExtra。
2. 使用 Bundle 和 BundleCompat
Bundle 是一种轻量级的数据容器,常用于存储键值对。通过 BundleCompat,即使在低版本 Android 上也能安全地使用 Bundle 进行跨进程通信。
示例代码:
```java
Bundle bundle = new Bundle();
bundle.putParcelable("person", person);
TargetActivity.startActivity(bundle);
```
3. ViewModel 的应用
ViewModel 是一种设计模式,特别适用于保存 UI 相关的状态信息。通过 ViewModel,可以在多个 Fragment 或 Activity 之间共享数据,而无需手动管理生命周期。
创建 ViewModel:
```java
public class SharedViewModel extends ViewModel {
private final MutableLiveData
public void select(Person person) {
selected.setValue(person);
}
public LiveData
return selected;
}
}
```
在 Fragment 或 Activity 中注入 ViewModel 并监听变化:
```java
SharedViewModel model = new ViewModelProvider(this).get(SharedViewModel.class);
model.getSelected().observe(this, person -> {
// 处理接收到的对象
});
```
总结
以上介绍了三种常见的对象传递方式:Intent 的 Serializable 和 Parcelable、Bundle 及其兼容性处理,以及 ViewModel 的应用。每种方法都有其适用场景,开发者应根据具体需求选择最合适的方案。希望本文能为你的 Android 开发之路提供有力的支持!
如果您有任何疑问或需要进一步的帮助,请随时告诉我!