Android Studio中如何通过Intent传递自定义Workout对象
当然可以解决这个问题!要在两个Activity之间传递自定义的Workout对象,核心是让你的类支持对象序列化——Android提供了两种标准方式:Serializable和Parcelable,下面给你详细拆解每种方法的实现步骤:
方法一:实现Serializable接口(简单易上手)
这是最快捷的方式,只需要让你的Workout类实现Serializable接口即可,不需要额外重写复杂方法(除非有特殊的序列化逻辑需求)。
步骤1:改造Workout类
import java.io.Serializable; public class Workout implements Serializable { // 你的类成员变量(示例) private String workoutName; private int minutes; private boolean isCompleted; // 构造方法 public Workout(String workoutName, int minutes, boolean isCompleted) { this.workoutName = workoutName; this.minutes = minutes; this.isCompleted = isCompleted; } // 按需添加getter/setter方法 public String getWorkoutName() { return workoutName; } public void setWorkoutName(String workoutName) { this.workoutName = workoutName; } }
步骤2:传递对象到目标Activity
// 创建Workout实例 Workout workoutP = new Workout("核心训练", 20, false); // 初始化Intent并添加对象 Intent intent = new Intent(CurrentActivity.this, TargetActivity.class); intent.putExtra("workout", workoutP); // 这里用putExtra即可,Serializable类型会被自动处理 startActivity(intent);
步骤3:在目标Activity中接收对象
// 获取传递过来的Workout对象 Workout receivedWorkout = (Workout) getIntent().getSerializableExtra("workout");
方法二:实现Parcelable接口(Android官方推荐,性能更优)
Parcelable是Android原生设计的序列化方式,比Serializable效率更高,适合需要频繁传递对象或者对象数据量较大的场景。
步骤1:改造Workout类
import android.os.Parcel; import android.os.Parcelable; public class Workout implements Parcelable { private String workoutName; private int minutes; private boolean isCompleted; // 常规构造方法 public Workout(String workoutName, int minutes, boolean isCompleted) { this.workoutName = workoutName; this.minutes = minutes; this.isCompleted = isCompleted; } // 从Parcel中读取数据的构造方法,用于反序列化 protected Workout(Parcel in) { workoutName = in.readString(); minutes = in.readInt(); isCompleted = in.readByte() != 0; // boolean类型用byte存储,0为false,非0为true } // 固定写法,一般返回0即可 @Override public int describeContents() { return 0; } // 将对象数据写入Parcel,用于序列化 @Override public void writeToParcel(Parcel dest, int flags) { dest.writeString(workoutName); dest.writeInt(minutes); dest.writeByte((byte) (isCompleted ? 1 : 0)); } // 静态CREATOR对象,必须实现Parcelable.Creator接口,用于创建对象实例 public static final Creator<Workout> CREATOR = new Creator<Workout>() { @Override public Workout createFromParcel(Parcel in) { return new Workout(in); } @Override public Workout[] newArray(int size) { return new Workout[size]; } }; // 按需添加getter/setter方法 public String getWorkoutName() { return workoutName; } }
步骤2:传递对象到目标Activity
和Serializable方式一样,直接用putExtra:
Workout workoutP = new Workout("核心训练", 20, false); Intent intent = new Intent(CurrentActivity.this, TargetActivity.class); intent.putExtra("workout", workoutP); startActivity(intent);
步骤3:在目标Activity中接收对象
// Android 12及以下版本写法 Workout receivedWorkout = getIntent().getParcelableExtra("workout"); // Android 13及以上推荐指定类型,避免类型转换警告 // Workout receivedWorkout = getIntent().getParcelableExtra("workout", Workout.class);
小提示:如果只是简单传递少量数据,Serializable足够用;如果追求性能或者处理复杂对象,优先选Parcelable
内容的提问来源于stack exchange,提问作者Maayan Kaidar
相关产品推荐
相关产品推荐

