首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >BackStackEntryCount和FragmentManager

BackStackEntryCount和FragmentManager
EN

Stack Overflow用户
提问于 2019-09-19 15:21:35
回答 1查看 1.3K关注 0票数 1

我搜索了很多,在网上找到了很多解释,但我仍然对FragmentsFragmentManagerfindFragmentByTag感到困惑。

假设我有三个片段FragmentA,FragmentB,FragmentCA,B,C分别是它们的标记。

我按照如下顺序执行FragmentTransaction

1-添加FragmentA {BackStackEntryCount=1,BackStack=A}

2-添加FragmentB {BackStackEntryCount=2,BackStack=B,A}

3-添加FragmentA {BackStackEntryCount=3,BackStack=A,B,A}

4-添加FragmentC {BackStackEntryCount=4,BackStack=C,A,B,A}

5-替换FragmentA {BackStackEntryCount=5,BackStack=A}

在步骤5之后,它将显示replace将从BackStack中删除(销毁)所有现有的fragments,并添加新的BackStackEntryCount,但BackStackEntryCount显示它记住/保存了5个事务。所以,我有FragmentA在顶部,并显示给用户。问题是,如果我现在执行:

代码语言:javascript
复制
supportFragmentManager.findFragmentByTag("A") // returns null But it should return FragmentA? But why it is returning null?
supportFragmentManager.fragments // shows that FragmentA in returned List

我的看法是,BackStackEntryCount只记住addToBackStack("SOME_TAG" or null)保存的全部事务,但是当replaceFragmentManager中删除所有片段时,它不会更新它。请帮我澄清我的理解。

EN

回答 1

Stack Overflow用户

发布于 2019-09-20 21:20:31

关于方法findFragmentByTag的文档

在从XML中充气时或在事务中添加时找到由给定标记标识的片段。

代码语言:javascript
复制
supportFragmentManager
    .beginTransaction()
    .replace(R.id.container, fragment, "TAG")
    .addToBackStack("StackFrameName")
    .commit()

标记是在replaceadd方法或XML中设置的。

addToBackStack为堆栈帧取了一个名称,您可以使用它来查找堆栈帧,而不是片段本身。

replace将给定id中的片段交换为add添加的片段到视图中的片段。

这些方法的最大区别是,add将视图添加到容器中,而replace则用自己的视图替换容器中的视图。除非将后台代码添加到事务中,否则不影响后台堆栈。

更新:

一旦您替换了一个片段或删除了一个片段,它就不再被附加到片段管理器上,无法通过标记找到它,但是如果它已经添加到后端堆栈中,您可以通过弹出后端堆栈将它重新附加到片段管理器上,直到它回来为止。这就是StackFrameName的作用所在。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58014282

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档