在屏幕层次结构中直接导航到片段深度

时间:2015-03-26 15:55:54

标签: android android-fragments navigationbar android-navigation

我正在开发一个具有标签栏导航模式的应用。每个选项卡代表应用程序的一项功能,该功能由每日更新的现成数据库支持。如果数据库中不存在功能的数据,我会有AlertDialog提示用户从更新屏幕更新其数据库。 UpdatesFragmentSettingsFragment的子屏幕,它是标签栏上的顶级选项。

直接从对话框中显示UpdatesFragment但是仍然将设置标签显示为已选中的最佳方式是什么,并允许用户在按下时返回设置?我应该通过SettingsFragment并传递一个参数来直接用UpdatesFragment替换自己吗?

Home | FeatureA | FeatureB | ... | Settings
                                      |
                                   Updates

1 个答案:

答案 0 :(得分:0)

我认为您应该让用户从任何位置更新,或者至少从AlertDialog本身触发更新。

无论如何,如果用户一直点击到最终目的地,你想要构建你的后台堆栈的方式与构建它的方式相同。

Android为此事提供TaskStackBuilder,您可以在官方Android文档中找到here

在您的评论之后更新

嗯,我明白你的意思了。那么你必须创建片段事务和/或使用Bundle值来告诉“下一个”片段它需要打开下一个片段等等。说实话,当需要像这样的“快捷方式”时,在代码开始变得越来越多的意大利面之前,应该解决一个可能的架构缺陷(没有冒犯)。

但是,由于我不知道您的代码和您的应用,我不会判断您:)

如果我遇到这种情况,我会怎么做,试着走这条路:

触发同一活动的意图(以便您的活动收到onNewIntent())并传递一个包含活动所需信息的包,以解决意图并触发正确的片段交易?

如果UpdatesFragment应该替换设置片段,那么您的活动应该在收到该意图时执行以下任一操作:

1)创建一个Fragment Transaction,用SettingsFragment替换当前片段。

2)将Bundle传递给SettingsFragment告诉它打开UpdateFragment(以及其他任何需要的信息)。

3)将其添加到Backstack。

4)SettingsFragment应该检查(在启动时)args包是否包含这样的值,并且应该立即继续创建另一个FragmentTransaction以用UpdatesFragment替换它自己(并且还传递前者可能需要执行其动作的Bundle中的任何args) )。

...或

也许你可以尝试一步完成(我不确定这是否有效,这取决于你的架构,但很容易尝试)。

PseudoCode(假设您已经拥有了Fragments实例等)

fragmentTransaction
   .replace(your_container, settingsFragment)
   .addToBackStack(null)
   .replace(your_container, updateFragment)
   .addToBackStack(null)
   .commit();