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