我正在开发一个具有标签栏导航模式的应用。每个选项卡代表应用程序的一项功能,该功能由每日更新的现成数据库支持。如果数据库中不存在功能的数据,我会有AlertDialog
提示用户从更新屏幕更新其数据库。 UpdatesFragment
是SettingsFragment
的子屏幕,它是标签栏上的顶级选项。
直接从对话框中显示UpdatesFragment
但是仍然将设置标签显示为已选中的最佳方式是什么,并允许用户在按下时返回设置?我应该通过SettingsFragment
并传递一个参数来直接用UpdatesFragment
替换自己吗?
Home | FeatureA | FeatureB | ... | Settings
|
Updates
答案 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();