Нулевой пакет при переходе от действия к фрагменту - PullRequest
0 голосов
/ 27 октября 2019

При попытке передать пользовательский объект из действия во фрагмент с помощью пакета, я продолжал получать нулевой пакет, когда пытался получить его во фрагменте. Я использую посылки, так как они являются единственным вариантом для пользовательских массивов. Любая помощь приветствуется!

Чтобы показать, что мой класс доступен для отправки:

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

1 Ответ

0 голосов
/ 27 октября 2019

Вам нужно использовать bundle.putParcelableArrayList, чтобы поместить объекты списка Parcelable, а не putSerializable

Если типы не совпадают, вы получите ноль

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...