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

  • 相关阅读:
    2019-11-12-WPF-添加窗口消息钩子方法
    2018-11-21-WPF-解决-ViewBox--不显示线的问题
    ARRAY_SIZE宏
    tcp校验和
    arp命令
    sk_buff
    printf打印字节
    dmesg命令
    insmod/rmmod
    ifup/ifdown
  • 原文地址:https://www.cnblogs.com/genggeng/p/6780014.html
Copyright © 2011-2022 走看看