簡體   English   中英

從活動傳遞到片段時的 Null 捆綁包

[英]Null bundle when passing from activity to fragment

當嘗試使用捆綁包將自定義 object 從活動傳遞到片段時,當我嘗試在片段中檢索它時,我不斷收到 null 捆綁包。 我正在使用包裹,因為它們是自定義數組列表的唯一選擇。 任何幫助表示贊賞!

為了證明我的 class 是可包裹的:

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");
 }

Model class

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;
    }
}

將其傳遞給 Frag

@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");
    }

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

如果類型不匹配,你會得到 null

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM