zoukankan      html  css  js  c++  java
  • Fragment add replace 区别

    首先获取FragmentTransaction对象:FragmentTransaction transaction = getFragmentManager().beginTransaction();

    两种方法不同之处是否要清空容器再添加fragment的区别,用法上add配合hide或是remove使用,replace一般单独出现。

    添加

    一般会配合hide使用:transaction.add(R.id.fragment_container, oneFragment).hide(twoFragment).commit();

    1.第一个参数是容器id, 第二个参数是要添加的fragment,添加不会清空容器中的内容,不停的往里面添加

    2.不允许添加同一个fragment实例,这是非常重要的特点。如果一个fragment已经进来的话,再次添加的话会报异常错误的。

    3.添加进来的fragment都是可见的(visible),后添加的fragment会展示在先添加的fragment上面,在绘制界面的时候会绘制所有可见的view

    4.所以大多数add都是和hide或者是remove同时使用的。这样可以节省绘制界面的时间,节省内存消耗,是推荐的用法。

    替换

    transaction.replace(R.id.fragment_container, oneFragment).commit();

    1.替换会把容器中的所有内容全都替换掉,有一些app会使用这样的做法,保持只有一个fragment在显示,减少了界面的层级关系。

    相同之处:每次add和replace都要走一遍fragment 的周期。

     其实fragment一般不会这么简单使用,replace的使用场景一般不多,大多数是添加(add)和显示(show)配合隐藏(hide)来使用,这样首先避免相同类型的fragment的重复添加,提示开发者使用单例模式,已经添加过的fragment很多情况没有必要再次添加,而且还有把生命周期再走一遍,这是一种比较浪费的做法

    最合适的处理方式是这样的:

    1.在add的时候,加上一个tab参数
    transaction.add(R.id.content, IndexFragment,”Tab1″);
    2.然后当IndexFragment引用被回收置空的话,先通过
    IndexFragment=FragmentManager.findFragmentByTag(“Tab1″);
    找到对应的引用,然后继续上面的hide,show;

    http://blog.csdn.net/shimiso/article/details/44677007

  • 相关阅读:
    Java数据结构学习Day2_Java基础排序算法
    Java数据结构学习Day1_队列_用数组模拟队列以及环形队列
    Java数据结构学习Day1_稀疏数组
    系统结构实践第七次作业——23组
    第04组 Alpha事后诸葛亮
    第04组 Alpha冲刺(4/4)
    第04组 Alpha冲刺(3/4)
    第04组 Alpha冲刺(2/4)
    第04组 Alpha冲刺(1/4)
    第四组团队git现场编程实战
  • 原文地址:https://www.cnblogs.com/genggeng/p/6780014.html
Copyright © 2011-2022 走看看