zoukankan      html  css  js  c++  java
  • Fragment 的 replace 和 add 方法的区别?

    Fragment 本身并没有 replace 和 add 方法,这里的理解应该为使用 FragmentManager 的 replace 和 add 两
    种方法切换 Fragment 时有什么不同。
    我们经常使用的一个架构就是通过 RadioGroup 切换 Fragment,每个 Fragment 就是一个功能模块。

    case R.id.rb_1:
      rb_1.setBackgroundColor(Color.RED);
      transaction.show(fragment1);
      // transaction.replace(R.id.fl, fragment1, "Fragment1");
      break;
    case R.id.rb_2:
      rb_2.setBackgroundColor(Color.YELLOW);
      // transaction.replace(R.id.fl, fragment2, "Fragment2");
      transaction.show(fragment2);
      break;
    case R.id.rb_3:
      rb_3.setBackgroundColor(Color.BLUE);
      // transaction.replace(R.id.fl, fragment3, "Fragment3");
      transaction.show(fragment3);
      break;
    

    实现这个功能可以通过 replace 和 add 两种方法。
    Fragment 的容器一个 FrameLayout,add 的时候是把所有的 Fragment 一层一层的叠加到了 FrameLayout 上
    了,而 replace 的话首先将该容器中的其他 Fragment 去除掉然后将当前 Fragment 添加到容器中。
    一个 Fragment 容器中只能添加一个 Fragment 种类,如果多次添加则会报异常,导致程序终止,而 replace 则
    无所谓,随便切换。
    因为通过 add 的方法添加的 Fragment,每个 Fragment 只能添加一次,因此如果要想达到切换效果需要通过
    Fragment 的的 hide 和 show 方法结合者使用。将要显示的 show 出来,将其他 hide 起来。这个过程 Fragment 的
    生命周期没有变化。
    通 过 replace 切 换 Fragment , 每 次 都 会 执 行 上 一 个 Fragment 的 onDestroyView , 新 Fragment 的
    onCreateView、onStart、onResume 方法。
    基于以上不同的特点我们在使用的使用一定要结合着生命周期操作我们的视图和数据。

  • 相关阅读:
    Element 更新以及全局设置属性
    第二次作业
    软件工程---自我介绍
    git lfs
    SUID
    G1 log 解析
    CMS jvm flags详解
    java不安全证书报证书路径找不到问题
    记一次CMS unloading class 耗时长调查
    springboot jsp 在Linux中报404问题
  • 原文地址:https://www.cnblogs.com/loaderman/p/6525503.html
Copyright © 2011-2022 走看看