有没有办法收听 FragmentManager 的 FragmentTransactions?

Posted

技术标签:

【中文标题】有没有办法收听 FragmentManager 的 FragmentTransactions?【英文标题】:Is there a way to listen to FragmentTransactions of a FragmentManager? 【发布时间】:2015-08-10 04:52:39 【问题描述】:

我有一个应用程序,其中包含多个相互交互的 Fragments。有时我必须添加一个Fragment,有时我会替换它。

有没有办法监听 FragmentTransactions 的完成情况,这样我就可以跟踪每次添加/显示/替换 Fragment 的时间?

我尝试了fragmentManager.addOnBackStackChangedListener(),但没有成功。

我想在所有的 onResume() 上做点什么,但如果应用程序进入后台和前台,我不应该对我的 UI 做任何事情。只有当我在他们之间互动时。

感谢任何帮助/策略。

编辑: 原因是我有一个覆盖将显示在当前片段中。如果用户导航到任何其他 Fragment,我需要此叠加层消失。

【问题讨论】:

老实说,我不明白为什么人们只是在没有提供任何反馈的情况下对问题投反对票。 【参考方案1】:

如果我的理解正确,您不需要每次都听就知道这一点——您只需要知道关于您的应用程序的内容即可。如果是这样,请编写 FragmentHelper 类(或添加一些方法到您的 Base 片段类,如果有的话)并用它包装 FragmentManager 方法,包括。所有额外的逻辑、跟踪或您需要的所有其他内容。

【讨论】:

我有一个将显示在当前片段中的叠加层。如果用户导航到任何其他片段,我需要这个覆盖消失。这就是为什么我认为我需要了解所有交易。我会看看你的建议。谢谢 是我必须手动添加的自定义叠加层,因此也需要手动删除 除非我错过了有关此叠加层的某些内容,否则这看起来完全无关紧要。这是您的活动,它承载片段 我有一个 Activity,其中有大约 5 个 Fragment 以多种方式交互。我在一个 Fragment 上有一个“覆盖”(视图),现在我的客户要求我在当前 Fragment 上显示它,但它只能显示一次。所以我需要手动管理它,并且想要一种简单/高级的方式来做到这一点。我不明白为什么它无关紧要 然后重新设计活动的布局。将您的覆盖和片段容器都放在即FrameLayoutRelativeLayout 中(覆盖将在哪里,嗯......在片段容器上)并减轻片段处理它的需要。如果你都做对了,那么你的活动无论如何都会管理片段,所以管理叠加层不会有问题【参考方案2】:

FragmentManager.BackStackEntry 并注意getName(),通过在数组中保持对它的引用,每当调用onBackStackChanged() 时,您就会知道谁被删除或添加了。

逻辑编辑

ArrayList<String> myNames; //will contain the tag id
// when onbackstackchanged is triggered
// get the one on top with getBackstackEntryAt(lastpos).getName()
//use that to check myNames.contains(String)
// i guess you can now put your logic in an if else statement

【讨论】:

以上是关于有没有办法收听 FragmentManager 的 FragmentTransactions?的主要内容,如果未能解决你的问题,请参考以下文章

有没有办法“收听”到 Telnet 流?

收听 Swf 面板关闭

收听实时音频流

在 Windows 中以编程方式设置正在“收听”的音频设备

FragmentManager IllegalStateException:没有主机

Android FragmentManager 和 Fragment Result API