值更新会自动通过参数传递

时间:2016-11-04 02:46:31

标签: java android android-fragments

我有一个包含HashMap和Fragment的Activity。

活动以HashMap为空开始。我仍然将它传递给片段作为parcelable trough newInstance,我把它放到了Fragment的参数中。

public static SelectSchoolFragment newInstance(School[] schools, HashMap<String, FavoriteInfo> favorites)
{
    SelectSchoolFragment fragment = new SelectSchoolFragment();
    Bundle args = new Bundle();
    args.putParcelableArray(ARG_SCHOOLS, schools);

    HashMapContainer tempContainer = new HashMapContainer();
    tempContainer.data_map = favorites;
    args.putParcelable(ARG_FAVORITES,tempContainer);

    fragment.setArguments(args);
    return fragment;
}

(HashMapContainer只是一个包含HashMap槽的裸类.GetsInfo只有两个字符串)

发生了东西,我的Activity通过onActivityResult获取了HashMap的一个元素。

我开始编写代码来使用新的HashMap更新片段,因为参数中包含的原始内容应该与我初始化的相同,对吧?然而,当我旋转屏幕并且片段的OnCreate从参数中读取值时,它以某种方式已经包含了我写入活动的HashMap副本的内容。

@Override
public void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    Misc.printInfo("SelectSchoolFragment: OnCreate");
    if (getArguments() != null)
    {
        schools = (School[]) getArguments().getParcelableArray(ARG_SCHOOLS);
        mFavorites = ((HashMapContainer) getArguments().getParcelable(ARG_FAVORITES)).data_map;
    }

    adapter = new SelectSchoolRecyclerViewAdapter(schools, mFavorites,listener);
}

我从未以任何方式更新过这些参数,也没有在任何地方写过任何包。我已经检查过newInstance第二次没有被调用。 Fragment没有重新启动。我还注意到,即使我不旋转屏幕,新数据也会神奇地出现在片段HashMap中。

我知道java会以它的方式传递值,但它是否真的通过Arguments和一个parcel工作,还是还有其他事情发生?我发现很难理解我的变量在他们这样做时的变化。

0 个答案:

没有答案