【问题标题】: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 是什么,除非我手动跟踪,但那真的很丑。

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

【问题讨论】:

    标签: android focus fragment fragmentmanager


    【解决方案1】:

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

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

    【讨论】:

    • 谢谢...这非常令人失望。但是,是的......看起来你是对的。我认为您可能需要考虑修改您的其他答案以利用 Fragment onResume() 绕过后退按钮......在实现内部的不同情况下,监听 Back 可能会导致意外结果。但是当片段从后台堆栈返回时,片段会可靠地调用 onResume() ......这是我的(丑陋的)解决方案 atm。
    • 没错,onResume 总是会被调用。谢谢!
    猜你喜欢
    • 2020-02-19
    • 2017-06-14
    • 2013-04-21
    • 2010-09-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-07
    相关资源
    最近更新 更多