找出当前显示的片段是啥的最佳方法是啥?

Posted

技术标签:

【中文标题】找出当前显示的片段是啥的最佳方法是啥?【英文标题】:What's the best way to find out what the currently displayed fragment is?找出当前显示的片段是什么的最佳方法是什么? 【发布时间】:2015-06-06 13:04:20 【问题描述】:

我正在尝试寻找类似于 FragmentManager.peek() 方法的东西。

用例是我需要将屏幕焦点发送到当前加载的 Fragment。但是,我发现自己必须手动跟踪当前正在显示的片段,以便我可以让它集中注意力。

具体情况是我有一个包含许多按钮的菜单。当用户单击一个按钮时,我需要将焦点从按钮转移到当前加载的 Fragment 中的特定视图 - 但我无法知道当前加载了什么 Fragment,它可能是与菜单项关联的初始 Fragment,或者它可能是一个完全不同的片段,用户已经深入挖掘了原始片段......所以我的逻辑必须是

pseudo...
if(currentFragment == navButton.myFragmentType)
   currentFragment.sendFocusToYourFirstRelevantElement()
else
   navButton.loadMyFragmentType()

我的问题是我不知道当前显示的 Fragment 是什么,除非我手动跟踪,但那真的很丑。

希望有更原生的解决方案。

【问题讨论】:

【参考方案1】:

您必须手动跟踪片段。 想想 Fragments 是如何工作的——它们被设计成可重复使用的,而且值得注意的是,屏幕上一次可以有多个。正因为如此,它并不像在 FragmentManager 中查询当前显示的 Fragment 那样简单,因为它不知道您想要哪个当前显示的 Fragment。 该知识所需的逻辑不能放在 FragmentManager 中,因为它非常特定于您的应用程序。

欲了解更多信息:What Fragments am I hosting and displaying?

【讨论】:

谢谢...这非常令人失望。但是,是的......看起来你是对的。我认为您可能需要考虑修改您的其他答案以利用 Fragment onResume() 绕过后退按钮......在实现内部的不同情况下,监听 Back 可能会导致意外结果。但是当片段从后台堆栈返回时,片段会可靠地调用 onResume() ......这是我的(丑陋的)解决方案 atm。 没错,onResume 总是会被调用。谢谢!

以上是关于找出当前显示的片段是啥的最佳方法是啥?的主要内容,如果未能解决你的问题,请参考以下文章

在 SwiftUI 中装饰文本片段的最佳方法是啥?

iphone / Objective c的最佳代码片段网站是啥[重复]

保存 RecyclerView 状态的最佳方法是啥?

构建应用程序架构(活动和片段)的最佳方式是啥

在片段中调用 getActivity() 以使其不返回 null 的最佳做法是啥? [复制]

在 Markdown 中,链接到页面片段的最佳方式是啥,即#some_id?