【问题标题】:Fragments and Rotation碎片和旋转
【发布时间】:2012-04-20 20:39:38
【问题描述】:
【问题讨论】:
标签:
android
orientation
android-fragments
【解决方案1】:
我怀疑如果您查看肖像模式的/res/layout/fragment_layout.xml(设置为contentView 用于Activity),您会在<fragment> 标记中找到对列表的引用片段而不是细节片段。
如果您将其切换为引用详细信息片段而不是列表片段,那么您将走上正确的轨道。
考虑到我刚才提到的布局切换,您可能仍然需要深入研究代码以使逻辑完全按照您的要求运行,但这就是开始的地方。
您会遇到另一个问题(虽然我想将这个添加到我的答案中,因为我必须运行,但我还没有考虑过这个问题),即当您第一次启动 Activity 时您可能需要并排放置两个片段的景观;这将对应于纵向列表片段。在列表中选择一个项目需要将预期的纵向行为切换为显示另一个片段......所以也许保留一个布尔值 mIsItemSelected 并在您的 Activity 构造函数中使用它来决定您希望哪个纵向布局/片段对显示(列表或详细信息)。
【解决方案2】:
Jon O 的回答将我推向了正确的方向。事实上,在纵向上,XML 只显示了列表片段:
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent" android:layout_height="match_parent">
<fragment class="com.dixon.blah.Events$EventsListFragment"
android:id="@+id/titles"
android:layout_width="match_parent" android:layout_height="match_parent" />
</FrameLayout>
如果我将其更改为详细信息片段,但我会得到一个 FC,因为尚未选择列表中的任何项目。我通过将下面的代码放入我的 FragmentActivity onCreate 方法来解决这个问题:
if(detailsFrame != null) {
Intent intent = new Intent();
intent.setClass(this, EventDetailsActivity.class);
intent.putExtra("index", mCurCheckPosition);
intent.putExtra("id", mSelectedId);
startActivity(intent);
}
一旦列表中的一个项目被选中, detailsFrame 变量就会指向片段的视图。因此,从细节片段中的纵向旋转到横向再返回,视图仍然保留并正确显示。