捆绑不将相应的列表数据传递到Fragment中

时间:2017-11-18 06:38:14

标签: android bundle

我试图通过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()));
    }

0 个答案:

没有答案