【问题标题】:If I add a new transaction(adding fragment, no removing) to the fragment backstack, do the fragment objects in previous transaction get copied or used如果我向片段 backstack 添加新事务(添加片段,不删除),是否复制或使用先前事务中的片段对象
【发布时间】:2018-09-25 01:36:50
【问题描述】:

假设对于我的第一个事务,我添加了 Fragment A,添加到 backstack,然后提交。

对于我的第二个事务,我添加 Fragment B,添加到 backstack,然后提交。

在我的第二次交易之后,我同时拥有 Fragment A 和 Fragment B。 Fragment A 仍然是指我在第一个事务中创建的同一个 Fragment A 对象还是它的副本?

我在某处读到说,在每次事务之后,都会创建片段的快照,并且只有在复制现有片段以使旧快照不会被新快照弄乱时,这对我才有意义。

具体是如何工作的?

【问题讨论】:

    标签: android android-fragments android-fragmentactivity back-stack fragmenttransaction


    【解决方案1】:

    使用addToBackStackFragmentTransaction 仅记录有关操作的最少信息-在您的情况下,是添加的片段以及它是“添加”操作的事实。 FragmentManager 绝对不会做任何快照类型的行为。

    这有两种使用方式:

    1. 执行FragmentTransaction。 “添加”操作不会影响其他 Fragment(因此添加 Fragment B 时 Fragment A 不会更改)。
    2. 当您弹出返回堆栈(即,点击系统返回按钮)时,操作是相反的 - “添加”操作变为“删除”操作。对于“删除”操作,不会更改其他 Fragment(因此当您弹出 Fragment B 时,Fragment A 仍然存在)

    当然,其他操作,例如“替换”会影响两个 Fragment(您可以将其视为旧 Fragment 的“删除”和新 Fragment 的“添加”)。

    【讨论】:

    • 问题,如果一个容器中有多个片段,replace函数如何决定替换哪个片段?
    • @RichardGarcia - 它用你传入的containerId 替换所有片段。
    猜你喜欢
    • 1970-01-01
    • 2016-06-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多