为什么fragment new出来之后只推荐使用getArguments()获取数据在不想使用序列化的时候如何解决 TabVideoFragment tab1VideoFragment = TabVideoFragment.class.newInstance(); tab1VideoFragment.setDefaultStoreList(list);/
为什么fragment new出来之后只推荐使用getArguments()获取数据在不想使用序列化的时候如何解决
TabVideoFragment tab1VideoFragment = TabVideoFragment.class.newInstance();
tab1VideoFragment.setDefaultStoreList(list);//当内存中有一个的时候无效
Bundle bundle=new Bundle();
//Cns.INTENT_BOOLEAN
bundle.putBoolean(Cns.INTENT_BOOLEAN,true);
bundle.putBoolean(Cns.INTENT_NEED_FROM_ACTIVITY_FETCH_DATA,list!=null);
tab1VideoFragment.setArguments(bundle);
tab1VideoFragment.setSelectPosition(position);//当内存中有一个的时候无效
Bundle arguments = getArguments();
if (arguments != null && arguments.getBoolean(Cns.INTENT_BOOLEAN)) {
mFromActivity = true;
if (arguments.getBoolean(Cns.INTENT_NEED_FROM_ACTIVITY_FETCH_DATA)) {
if (defaultStoreList == null && getActivity() instanceof FetchDataFromParent) {
Object o = ((FetchDataFromParent) getActivity()).fetchData();
defaultStoreList = (List<SmallVideoModel>) o;
}
}
}
有时候可能想写序列化,这个时候我想当然的直接fragment.setObject()传递一些数据进去,可是会发现获取为空,是见鬼了么?不?
public TabVideoFragment() {
Log.w(TAG, "HASHCODE:" + this.hashCode());
}
.TabVideoFragment: HASHCODE:44966402
会发现调用2次,说明什么?当fragmentManager里面有一个fragment的时候他是直接给new一个 然后从参数里取出来,所以你白弄了。。这也是比较方便优化内存吧,存储的数据通过他这么一搞,都给你抖掉
了
所以我这里用的方式是通过activity的接口来从activity里面拿数据.
另外一种方式就是通过eventbus也是可以拿到数据的。