[尝试通过使用包将自定义对象从活动传递到片段时,当我尝试在片段中检索空包时,我一直得到空包。我正在使用宗地,因为它们是自定义数组列表的唯一选择。任何帮助表示赞赏!
显示我的班级是可分割的:
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");
}
您需要使用bundle.putParcelableArrayList放置Parcelable列表对象,而不是putSerializable
如果类型不匹配,则为空
模型类
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");
}