You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 06:25:24