从活动传递到片段时为空束

问题描述 投票:0回答:1

[尝试通过使用包将自定义对象从活动传递到片段时,当我尝试在片段中检索空包时,我一直得到空包。我正在使用宗地,因为它们是自定义数组列表的唯一选择。任何帮助表示赞赏!

显示我的班级是可分割的:

public class Exercise implements Parcelable{

    private String mName;
    private String mMuscleGroup;
    private String mType;
    private String mEquipment;
    private float mWeight;
    private int mReps;
    private int mSet;

    public Exercise(String name, String MuscleGroup, String type, String equipment, float weight, int reps, int set) {
        mName = name;
        mMuscleGroup = MuscleGroup;
        mType = type;
        mEquipment = equipment;
        mWeight = weight;
        mReps = reps;
        mSet = set;
    }

    private Exercise(Parcel in) {
        mName = in.readString();
        mMuscleGroup = in.readString();
        mType = in.readString();
        mEquipment = in.readString();
        mWeight = in.readFloat();
        mReps = in.readInt();
        mSet = in.readInt();
    }

    public static final Creator<Exercise> CREATOR = new Creator<Exercise>() {
        @Override
        public Exercise createFromParcel(Parcel in) {
            return new Exercise(in);
        }

        @Override
        public Exercise[] newArray(int size) {
            return new Exercise[size];
        }
    };

    public String getName() {
        return mName;
    }

    public String getMuscleGroup() {
        return mMuscleGroup;
    }

    public String getType() {
        return mType;
    }

    public String getEquipment() {
        return mEquipment;
    }

    public float getWeight() { return mWeight; }

    public int getReps() { return mReps; }

    public int getSet() { return mSet; }

    @Override
    public int describeContents() {
        return 0;
    }

    @Override
    public void writeToParcel(Parcel parcel, int i) {
        parcel.writeString(mName);
        parcel.writeString(mMuscleGroup);
        parcel.writeString(mType);
        parcel.writeString(mEquipment);
        parcel.writeFloat(mWeight);
        parcel.writeInt(mReps);
        parcel.writeInt(mSet);
    }
}
'''

我正在传递来自的活动:

@Override
protected void onPause() {
     // send ArrayList of exercises to WorkoutsFragment
     WorkoutsFragment workoutsFragment = new WorkoutsFragment();
     Bundle bundle = new Bundle();
     bundle.putSerializable("exercise", exercise);
     workoutsFragment.setArguments(bundle);

     // clear exercise ArrayList

     super.onPause();
 }

碎片接收包:

 Bundle bundle = this.getArguments();
 if(bundle != null) {
     exercise = bundle.getParcelableArrayList("exercise");
 }
android android-fragments parcelable android-bundle
1个回答
0
投票

您需要使用bundle.putParcelableArrayList放置Parcelable列表对象,而不是putSerializable

如果类型不匹配,则为空


0
投票

模型类

public class SomeModelClass implements Serializable {

    private String someVar;

    public PurchaseData(String someVar) {
        this.someVar = someVar;
    }

    public String getSomeVar() {
        return productId;
    }

    public void setSomeVar(String someVar) {
        this.someVar = someVar;
    }
}

传递给片段

@Override
protected void onPause() {
    // send ArrayList of exercises to WorkoutsFragment
    WorkoutsFragment workoutsFragment = new WorkoutsFragment();
    Bundle bundle = new Bundle();
    bundle.putSerializable("exercise", yourObject);
    workoutsFragment.setArguments(bundle);

    super.onPause();
}

检索中

 if (getArguments().getSerializable("exercise") != null) {
        exercise = (YourObjectClass) getArguments().getSerializable("exercise");
    }
© www.soinside.com 2019 - 2024. All rights reserved.