fragmentTransaction.add和fragmentTransaction.replace之间的区别

 破背包 发布于 2023-02-09 11:19

我所知道的是:

之后fragmentTransaction.replace(),onStop()将调用当前片段的函数而fragmentTransaction.add()不会调用.

并要求后fragMgr.popBackStack();,我们将回到以前的片段,无论fragmentTransaction.replacefragmentTransaction.add()使用

那怎么fragmentTransaction.replace办?

我可以理解,我们可以"添加"一个片段opon一个前一个片段,然后返回到前面的片段popBackStack(),但是:

如果先前的片段被当前片段"替换",我想先前的片段被删除并且当前片段被添加进来,如何在popBackStack()调用时返回到前一片段?

2 个回答
  • 两个选择

    假设你有一个片段容器.
    而且,您的任务是将一个片段添加到容器中.

    您可以通过调用以下任何方法来执行此操作

    1)add(containerId,fragment)
    2)replace(containerId,fragment)

    但两种方法的行为都不同!!!

    在此输入图像描述 虽然两种方法都会将您的片段添加到片段容器中,但它们的内部(内部工作)会根据片段容器的两种可能状态而有所不同.
    当片段容器
    1)中没有任何片段时.
    2)已经附加了一个或多个片段.

    让我们看看当我们调用add()和replace()方法时会发生什么.

    案例1:当容器中没有附加碎片时

    在这种情况下,两种方法都会将片段添加到容器中.所以他们会产生同样的效果.

    情况2:当fragmentContainer已经有片段/片段时

    add():在顶部添加新片段另一个片段
    replace():删除所有内容然后添加新片段

    示例
    假设Fragment容器具有片段[A-> B-> C].
    现在你要添加一个新的片段D.
    add()方法结果将是[A-> B-> C-> D]
    replace()方法结果将是[D]

    相关链接:

    检查此演示项目以便更好地理解

    2023-02-09 11:22 回答
  • 您可以将多个片段添加到容器中,并将它们分层叠放在另一个容器之上.如果您的片段具有透明背景,您将看到此效果,并且能够同时与多个片段进行交互.

    如果您在容器上使用FragmentTransaction.add,则会发生这种情况.您添加的片段将放在现有片段的顶部.

    如果使用FragmentTransaction.replace(R.id.container,fragment)它将删除容器中已有的任何碎片并将新的碎片添加到同一容器中.

    您也可以使用不带容器ID的add方法,并且您的片段将被简单地添加到FragmentManager中的片段列表中,您可以随时通过其Tag值调用它们.

    如果您将事务添加到后台堆栈,您仍然可以返回先前的配置.即使先前的操作删除了片段,也可以执行此操作.在事务中记住删除的片段,然后弹出后备栈将其恢复.

    2023-02-09 11:22 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有