我有一个包含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工作,还是还有其他事情发生?我发现很难理解我的变量在他们这样做时的变化。