我试图通过Bundle将几个值列表传递给一个片段。但是我之前没有遇到任何问题。它看起来很傻 - 当我们在片段中检索包时,我无法弄清楚为什么列表的大小显示为0。
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];
}
};
}
我将数据放入Bundle的部分。 countriesFromBundle
的大小超过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;
}
这就是我获取空列表的地方,就像前面一样。 countriesList
的大小为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()));
}