0

I am trying to pass few lists of values into a fragment through Bundle. However I have done the same before without any problems. It looks so silly - I can't figure out why the size of lists are shown 0 when we retrieve the bundle in fragment.

Pojo:

public class BaseObjectType implements Parcelable {

    @SerializedName(value = "area_full_name",
            alternate = {"country_full_name", "language_full_name", "profile_level_full_name", "profile_type_full_name", "step_level_full_name"})
    @Expose
    private String name;

    @SerializedName(value = "id")
    @Expose
    private String id;

    protected BaseObjectType(Parcel in) {
        name = in.readString();
        id = in.readString();
    }

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

    @Override
    public void writeToParcel(Parcel dest, int flags) {
        dest.writeString(name);
        dest.writeString(id);
    }

    @SuppressWarnings("unused")
    public static final Parcelable.Creator<BaseObjectType> CREATOR = new Parcelable.Creator<BaseObjectType>() {
        @Override
        public BaseObjectType createFromParcel(Parcel in) {
            return new BaseObjectType(in);
        }

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

The part where I am putting data into Bundle. The size of countriesFromBundle is more than 0.

public static MembersFilterFragment newInstance(List<BaseObjectType> countriesList,
                                                    List<BaseObjectType> languagesList,
                                                    List<BaseObjectType> areasList,
                                                    List<BaseObjectType> profileTypeList,
                                                    List<BaseObjectType> profileLevelsList,
                                                    List<BaseObjectType> stepLevelsList) {
        MembersFilterFragment fragment = new MembersFilterFragment();
        Bundle bundle = new Bundle();
        bundle.putParcelableArrayList(FILTERS_COUNTRIES, (ArrayList<? extends Parcelable>) countriesList);
        bundle.putParcelableArrayList(FILTERS_LANGUAGES, (ArrayList<? extends Parcelable>) languagesList);
        bundle.putParcelableArrayList(FILTERS_AREAS, (ArrayList<? extends Parcelable>) areasList);
        bundle.putParcelableArrayList(FILTERS_PROFILE_TYPES, (ArrayList<? extends Parcelable>) profileTypeList);
        bundle.putParcelableArrayList(FILTERS_PROFILE_LEVELS, (ArrayList<? extends Parcelable>) profileLevelsList);
        bundle.putParcelableArrayList(FILTERS_STEP_LEVELS, (ArrayList<? extends Parcelable>) stepLevelsList);
        fragment.setArguments(bundle);
        List<BaseObjectType> countriesFromBundle = bundle.getParcelableArrayList(FILTERS_COUNTRIES);
        // countries size here is more than 0
        Log.d(TAG, String.valueOf(countriesFromBundle.size()));
        return fragment;
    }

And this is where I am getting the empty lists, like for ex. the size of countriesList is 0.

@Override
    protected void setUp(View v) {
        if (getActivity() == null || getArguments() == null) return;
        ((MainActivity) getActivity()).setSupportActionBar(mToolbar);
        ArrayList<BaseObjectType> countriesList = getArguments().getParcelableArrayList(FILTERS_COUNTRIES);
        ArrayList<BaseObjectType> languagesList = getArguments().getParcelableArrayList(FILTERS_LANGUAGES);
        ArrayList<BaseObjectType> areasList =  getArguments().getParcelableArrayList(FILTERS_AREAS);
        ArrayList<BaseObjectType> profileTypeList = getArguments().getParcelableArrayList(FILTERS_PROFILE_TYPES);
        ArrayList<BaseObjectType> profileLevelsList = getArguments().getParcelableArrayList(FILTERS_PROFILE_LEVELS);
        ArrayList<BaseObjectType> stepLevelsList = getArguments().getParcelableArrayList(FILTERS_STEP_LEVELS);
        mPresenter.storeFiltersArray(countriesList, languagesList, areasList, profileTypeList, profileLevelsList, stepLevelsList);
        // countries size returned here is 0
        Log.d(TAG, String.valueOf(countriesList.size()));
    }
Debdeep
  • 752
  • 10
  • 22

0 Answers0