本文主要是介绍为什么fragment new出来之后只推荐使用setArguments()传递数据在不想使用序列化的时候如何解决...,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
为什么fragment new出来之后只推荐使用getArguments()获取数据在不想使用序列化的时候如何解决
TabVideoFragment tab1VideoFragment = TabVideoFragment.class.newInstance();tab1VideoFragment.setDefaultStoreList(list);//当内存中有一个的时候无效Bundle bundle=new Bundle();//Cns.INTENT_BOOLEANbundle.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也是可以拿到数据的。
这篇关于为什么fragment new出来之后只推荐使用setArguments()传递数据在不想使用序列化的时候如何解决...的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!