gpt4 book ai didi

android - FragmentTransaction::replace() 有或没有 addToBackStack()

转载 作者:太空宇宙 更新时间:2023-11-03 12:50:03 24 4
gpt4 key购买 nike

具有添加 fragment 和稍后的 replace() fragment 的流程。所有 fragment 都是动态添加的,但不是所有 fragment 都调用addToBackStack()

getSupportFragmentManager().beginTransaction()
.add(R.id.frgment_holder, frgmtA, frgmtA.NAME)
.commit();

在某个地方它可以添加另一个,比如:

getSupportFragmentManager().beginTransaction()
.replace(R.id.frgment_holder, frgmtB)
.addToBackStack(frgmtB.NAME)
.commit();

带有 frgmtB 的 replace() 将从容器 R.id.frgment_holder 中删除 frgmtA。如果在此状态下按下后退按钮,它将弹出 frgmtB。但是,即使添加时没有调用 addToBackStack(),它会重新创建 frgmtA 吗?

如果在将 fragment 添加到同一容器中的流程中,连续调用混合了 add() 和 replace() 调用,并且有人调用了 addToBackStack() 但有人没有调用,后退按钮的行为会如何?

编辑:在

之后
getSupportFragmentManager().beginTransaction()
.replace(R.id.frgment_holder, frgmtB)
.addToBackStack(frgmtB.NAME)
.commit();

会不会

getSupportFragmentManager().findFragmentByTag(frgmtA.NAME);

还在找frgmtA吗?如果添加 frgmtA 时也调用了 addToBackStack() 怎么办;

文档说“这首先搜索当前添加到管理器 Activity 的 fragment ;如果没有找到这样的 fragment ,则搜索当前返回堆栈中的所有 fragment 。”

情况是

  1. 添加 frgmtA;不调用添加到堆栈; UI 状态在此处更改;

(如果 frgmtA 不是由 add() 动态添加的,而是在布局文件中用 class="frgmtA"指定的怎么办?)

  1. 用 frgmtB 替换(); addToStack();

  2. 用 frgmtC 替换(); addToStack();

然后,如果 stackTop 是 frgmtC,则希望按下后退按钮以带回第一个 frgmtA 及其最后的 UI 状态。

最佳答案

1.

.add(R.id.frgment_holder, frgmtA, frgmtA.NAME)
.commit();
.replace(R.id.frgment_holder, frgmtB, frgmtB.NAME)
.addToBackStack(frgmtB.NAME)
.commit();`

替换将从 holder 中删除 frgmtA,并且它的 onDestroyView 将被调用(但由于它在后台事务数据中被引用,frgmtA 不会被销毁)。并且 frgmtB 将被添加到 holder 中。由于 frgmtA 没有被破坏,

getSupportFragmentManager().findFragmentByTag(frgmtA.NAME); 

会找到的。

然后,按下后​​退按钮,它会从 backStack 中弹出顶部交易,然后撤消交易。即从支架中取出 frgmtB 并将 frgmtA 添加回支架。由于不再有对 frgmtB 的引用,它的 onDestroy 被调用。

2。在

的情况下
add frgmtA;
replace() with frgmtB; addToStack();
replace() with frgmtC; addToStack();

如果想后退跳转到frgmtA,需要重写onBackPressed(),在里面做

popBackStack(frgmtB.NAME, POP_BACK_STACK_INCLUSIVE), 

这将在名为 frgmtB.NAME 的堆栈条目上方的堆栈中抛出交易,并在其上反转交易,这将添加回 holder 中的 frgmtA。

关于android - FragmentTransaction::replace() 有或没有 addToBackStack(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33508480/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com