0

我正在开发一个具有经典列表内容模式的应用程序,在左侧显示菜单选项列表,在中心显示内容。不同的菜单选项会将内容与显示新信息的相应片段交换。

我正在努力实施正确的向上导航:

|---------------------------------------|
|< Frag. B |                B1  B2  B3  |
|----------|----------------------------|
|Fragment A|                            |
[Fragment B]                            |
|Fragment C|        Fragment B.2        |
|Fragment D|                            |
|Fragment E|                            |
|----------|----------------------------|

在上图中,用户已导航到片段 B.2。他首先从菜单中选择了 Fragment B,然后他按下了一个按钮,将他“进一步”带入 Fragment B,到 Fragment B.2。

如果用户现在按下 HOME(在 home 中)按钮,他将返回到 Fragment B。这是按预期工作的。

但是,在 Fragment B.2 内部,ActionBar 中有一个按钮,可将用户带到 Fragment E.2:

|---------------------------------------|
|< Frag. E |                E1  E2  E3  |
|----------|----------------------------|
|Fragment A|                            |
|Fragment B|                            |
|Fragment C|        Fragment E.2        |
|Fragment D|                            |
[Fragment E]                            |
|----------|----------------------------|

当用户在 Fragment E.2 中到达这里时,后堆栈中的前一个 Fragment 是 Fragment B.2。我当前的实现只是getActivity().onBackPressed()在按下 HOME 按钮时调用,用户将简单地返回 Fragment B.2。这对用户来说没有意义,所以我想实现一个系统,现在将用户带到片段 E(即使片段 B.2 是后堆栈中的前一个片段)。

我的直接想法是在每个片段中引用应该作为后堆栈中的前一个片段的片段的引用。片段 B.2 将引用片段 B,片段 E.2 将引用片段 E,等等。当按下 HOME 按钮时,我将启动作为前一个片段引用的片段。我对这个解决方案进行了辩论,但很快意识到这在后台堆栈方面可能会变得相当复杂,更不用说它听起来很笨拙。

有没有一种聪明的方法来实现这种行为?

4

1 回答 1

0

简短的回答:你的设计是错误的 模拟主页键上的后按是疯狂的,将用户带到他从未去过的屏幕只是疯狂!

长答案:如果你想实现这样的疯狂:因为你不能在后面的堆栈中插入一个片段,我会在选择的 ActionBar 项目上打开片段 E,然后自动启动片段 E.2?

其他解决方案:如果片段 E.2 从 ActionBar 打开,您也可以从片段 E.2 的 onPause() 启动片段 E。

于 2013-03-02T06:36:38.610 回答