我在思考如何Fragment
在典型的列表细节设计模式中正确管理 s 时遇到了麻烦。
我的布局工作正常,横向视图(双窗格)的结构如下:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout ... >
<FrameLayout android:id="@+id/list" ... />
<FrameLayout android:id="@+id/container" ... />
</LinearLayout>
对于纵向视图(单窗格),就像这样:
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout android:id="@+id/container" ... />
我还可以确保根据设备的屏幕宽度加载适当的布局refs.xml
。res/values-w600dp/
选择列表项时,横向视图应并排显示列表和详细信息,而纵向视图应仅全屏显示详细信息。当未选择任何内容时,横向视图应在左侧显示左侧,在右侧显示空白,而纵向视图应仅全屏显示列表。
但是,这就是我遇到麻烦的地方:
我是否将“主要”
Activity
用于列表 + 可选的详细信息布局,而将另一个“详细信息”Activity
用于纵向、仅详细信息布局?这似乎是片段指南示例所做的。我已经让这种方法可以正常工作,但是当方向改变时,我如何保持我的细节片段的状态?考虑上面显示的相反情况——在细节可见时从纵向旋转到横向意味着
Activity
需要finish()
编辑细节,以便主Activity
可以显示两窗格布局,但这也会破坏细节片段及其savedInstanceState
. 如果用户在详细信息片段的字段中键入信息EditText
,然后旋转设备,当我将详细信息片段添加到主(双窗格)时,如何保留详细信息片段的整个 UI 状态Activity
?我是否只使用一个
Activity
并自己管理Fragment
s?这允许我在方向更改时保留详细 UI 的状态(因为 Android 会自动处理这一点),但在返回堆栈时会变得混乱。考虑图像中的情况——当细节可见时从横向旋转到纵向应该显示细节单窗格,但是如何正确管理后退堆栈和
ActionBar
主页图标以显示列表单窗格?旋转回横向还需要撤消我之前所做的任何回栈操作,因为两个片段将同时可见。
经过更多搜索后,我发现了两个类似的问题(Switch from dual pane to single pane onorientation change maintenance fragment stack和Retain Fragment state between Activities),但我的情况略有不同,因为我没有尝试改进此功能,但最好预先计划好。我错过了什么?当然,Android 可以同时管理后台堆栈(如在多重Activity
情况下)和UI 状态(如在单一Activity
情况下),对吧?