2015-04-01 29 views
0

我试图找到类似于FragmentManager.peek()方法的东西。找出当前显示的片段是什么是最好的方法?

用例是我需要发送屏幕焦点到当前加载的片段。但是,我发现自己不得不手动跟踪当前正在显示的片段,以便我可以告诉它重点关注。

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

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

我的问题是,我不知道什么是当前显示的片段是,除非我手动跟踪,但这真的很难看。

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

回答

1

您必须手动跟踪碎片。
想一想Fragments是如何工作的 - 它们被设计成可重复使用的,特别是一次可以在屏幕上显示多个。正因为如此,它不像查询当前显示的片段的FragmentManager那么简单,因为它不知道哪个当前显示您想要的片段。 知识需要的逻辑不是可以放在FragmentManager中的东西,因为它对你的应用程序非常具体。

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

+0

谢谢...这是非常令人失望的。但是......看起来你是对的。我认为您可能需要考虑修改您的其他答案,以利用Fragment onResume()来避开后退按钮......在执行过程中,如果听到Back可能会导致意外的结果。但是,从backstack回来时,onResume()可靠地调用片段......这是我的(丑陋的)解决方案atm。 – 2015-04-01 19:06:44

+0

确实如此,onResume将始终被调用。谢谢! – athingunique 2015-04-01 19:16:37

相关问题