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 方法。
基于以上不同的特点我们在使用的使用一定要结合着生命周期操作我们的视图和数据。

Fragment 的 replace 和 add 方法的区别?的更多相关文章

  1. Fragment 源码解析add()和replace()方法

    1.有问题的代码: MainActivity public class MainActivity extends AppCompatActivity implements View.OnClickLi ...

  2. C#用Open与Add方法打开word文档的区别

    C#打开word文档常用有两种方法:Add与Open. Microsoft.Office.Interop.Word._Document doc = (Document)appWord.Document ...

  3. Queue接口分析:add和offer区别,remove和poll方法到底啥区别

    Queue接口: public interface Queue<E> extends Collection<E> { /* * add方法,在不违背队列的容量限制的情况,往队列 ...

  4. List的add方法与addAll方法的区别、StringBuffer的delete方法与deleteCharAt的区别

    List的add方法与addAll方法 区别 add add是将传入的参数作为当前List中的一个Item存储,即使你传入一个List也只会另当前的List增加1个元素 addAll addAll是传 ...

  5. EntityFramework Add方法与Attach区别

    一 先发问. 问题:在使用EF过程中,能否有一个方法可以直接执行传入的SQL语句.纠结的只找到了调用存储过程的方法,难道要SqlHelper.cs?    二 友情提示 本文内容参考自MSDN. 三 ...

  6. WPF中List的Add()与Insert()方法的区别

    先来看看定义: // Summary: // Adds an object to the end of the System.Collections.Generic.List<T>. // ...

  7. Java集合系列(四):HashMap、Hashtable、LinkedHashMap、TreeMap的使用方法及区别

    本篇博客主要讲解Map接口的4个实现类HashMap.Hashtable.LinkedHashMap.TreeMap的使用方法以及三者之间的区别. 注意:本文中代码使用的JDK版本为1.8.0_191 ...

  8. 正则表达式中的exec和match方法的区别

    正则表达式中的exec和match方法的区别 字符串的正则方法有:match().replace().search().split() 正则对象的方法有:exec().test() 1.match m ...

  9. TStringList TMemo Text与Add赋值的区别 Memo.Text赋值高度注意事项,不得不知的技巧。

    Memo.Text赋值高度注意事项,不得不知的技巧. list := TStringList.Create;  list.Text:= str:  list.Count; list.Clear;  l ...

随机推荐

  1. Nginx源码安装配置

    Nginx web服务器简介 Nginx ("engine x") 是一个高性能HTTP 和 反向代理 服务器.IMAP.POP3.SMTP 服务器. Nginx 是由 Igor ...

  2. Lua语言基本语法~运算符

    Lua 变量 变量在使用前,必须在代码中进行声明,即创建该变量. 编译程序执行代码之前编译器需要知道如何给语句变量开辟存储区,用于存储变量的值. Lua 变量有三种类型:全局变量.局部变量.表中的域. ...

  3. jq常用方法

    $().addClass(css中定义的样式类型);            给某个元素添加样式$().attr({src:”test.jpg”,alt:”test Image”});        给 ...

  4. detect 导图

    https://www.zhihu.com/question/356551927/answer/919612766 知乎上看到的,不错

  5. msvsmon.exe xp下不能运行

    远程调试   xp 下不能执行 vs2013 远程调试器 xp下不能运行 vs2010 远程调试器 xp下可以运行

  6. nginx反向代理原理及配置详解

    nginx概述nginx是一款自由的.开源的.高性能的HTTP服务器和反向代理服务器:同时也是一个IMAP.POP3.SMTP代理服务器:nginx可以作为一个HTTP服务器进行网站的发布处理,另外n ...

  7. package+explorer不显示项目的问题

    昨天遇到了这个问题,百度了一下,怎么搞的都有,但是感觉都不理想,晚上的时候才在网上又发现这个方法,今天试了一下,效果还不错,分享一下. 点击 Window ---> Close All Pers ...

  8. Kendo UI for jQuery使用教程:使用MVVM初始化(一)

    [Kendo UI for jQuery最新试用版下载] Kendo UI目前最新提供Kendo UI for jQuery.Kendo UI for Angular.Kendo UI Support ...

  9. 使用Vue做个简单的评论 + localstorage存储

     1.引入Vue.js 2.编写代码 代码 <!DOCTYPE html> <html lang="zh"> <head> <meta c ...

  10. k8s的一键分发秘钥 需要yum install expect

    #下面的密码你改改就行了 我的机器也用的123456 ssh-keygen -t rsa -P "" -f /root/.ssh/id_rsa for i in k8s-1 k8s ...