1

我正在实现类似于Fragments (Android Developers)中描述的片段层次结构。在此处输入图像描述

此外,在纵向平板电脑中,应用程序的行为应与第二种情况相同。我的问题是处理从一个方向到另一个方向的交易。

我考虑的第一个想法是:

  • 从横向到纵向:当活动A转到纵向时:将片段B移到视图中。启动活动 B 以获取传递适当值以恢复原始片段 B 状态的结果
  • 从纵向到横向:当活动 B 转到纵向时。完成(结果中的片段 2 状态)。带有结果的活动 A 恢复片段 B 并将其添加到其布局中。

但是这个解决方案非常复杂,我认为这可能不是一个好主意。我考虑过的替代解决方案是只有一个活动。该活动布局是:

<FrameLayout>
    <LinearLayout>
       <Fragment A>
       <Fragment B>
    <Slot>

对于小型设备:

  • 应用程序删除片段 B 并在选择项目时将片段添加到后台堆栈中的“插槽”

对于平板电脑:

  • 使用 fragmentTransactions 将片段 B 从它的位置移动到“插槽”,使用 backstack 以正确地适应方向变化

我认为第二个选项听起来更好但是,这样做是正确的方法吗?

谢谢

4

2 回答 2

1

如果您需要我的建议,我会说这取决于太多因素。我认为你应该坚持你认为可以管理的东西。这也取决于您的应用程序的屏幕流程有多复杂。

对我来说,如果你没有那么多碎片需要管理,那么将它保存在一个活动中是一个好主意。这种方法的一个优点是您不需要摆弄两个不同活动的生命周期。

无论如何,发现实施复杂性在某种程度上表明您计划的内容将来无法为您管理。

希望有帮助!

于 2012-11-17T14:53:26.930 回答
-1

我不明白您为什么要以如此复杂的方式进行操作。在平板电脑上进行一项活动,在手机上进行两项活动。让第一个活动实现一个侦听器,如果单击列表片段的项目将触发该侦听器。Activity 知道它是处于单窗格模式还是双窗格模式,因此在 onItemSelected 回调方法中,让它在单窗格模式的情况下启动一个新的活动,或者在平板电脑的情况下替换一个片段。

您还可以在创建新项目时使用 Master/Detail 模板看到这一点。

于 2013-02-21T01:47:55.483 回答