如何在不序列化的情况下,避免使用Fragment的setArguments()传递数据?

2026-06-09 13:005阅读0评论SEO基础
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计378个文字,预计阅读时间需要2分钟。

如何在不序列化的情况下,避免使用Fragment的setArguments()传递数据?

为什么使用`fragment new`创建Fragment实例后,只推荐使用`getArguments()`获取数据,而不想使用序列化等方式时,可以这样解决:

javaTabVideoFragment 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()传递一些数据进去,可是会发现获取为空,是见鬼了么?不?

如何在不序列化的情况下,避免使用Fragment的setArguments()传递数据?

public TabVideoFragment() {
Log.w(TAG, "HASHCODE:" + this.hashCode());
}

.TabVideoFragment: HASHCODE:44966402

会发现调用2次,说明什么?当fragmentManager里面有一个fragment的时候他是直接给new一个 然后从参数里取出来,所以你白弄了。。这也是比较方便优化内存吧,存储的数据通过他这么一搞,都给你​​抖掉​​​了
所以我这里用的方式是通过activity的接口来从activity里面拿数据.
另外一种方式就是通过eventbus也是可以拿到数据的。

本文共计378个文字,预计阅读时间需要2分钟。

如何在不序列化的情况下,避免使用Fragment的setArguments()传递数据?

为什么使用`fragment new`创建Fragment实例后,只推荐使用`getArguments()`获取数据,而不想使用序列化等方式时,可以这样解决:

javaTabVideoFragment 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()传递一些数据进去,可是会发现获取为空,是见鬼了么?不?

如何在不序列化的情况下,避免使用Fragment的setArguments()传递数据?

public TabVideoFragment() {
Log.w(TAG, "HASHCODE:" + this.hashCode());
}

.TabVideoFragment: HASHCODE:44966402

会发现调用2次,说明什么?当fragmentManager里面有一个fragment的时候他是直接给new一个 然后从参数里取出来,所以你白弄了。。这也是比较方便优化内存吧,存储的数据通过他这么一搞,都给你​​抖掉​​​了
所以我这里用的方式是通过activity的接口来从activity里面拿数据.
另外一种方式就是通过eventbus也是可以拿到数据的。