为什么fragment new出来之后只推荐使用setArguments()传递数据在不想使用序列化的时候如何解决...

2022-09-03 13:09:48

为什么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也是可以拿到数据的。

  • 作者:情迁666
  • 原文链接:https://blog.csdn.net/u010042660/article/details/122189008
    更新时间:2022-09-03 13:09:48