【问题标题】:Fragments and Rotation碎片和旋转
【发布时间】:2012-04-20 20:39:38
【问题描述】:

在 Gmail 应用程序中,从左侧片段中选择一封电子邮件会正常打开右侧片段中的电子邮件。如您所料,将设备旋转为纵向仅显示选定的电子邮件,将设备旋转回横向将再次显示电子邮件列表和选定的电子邮件。这一切都在意料之中,而且效果很好。

但是,在 API 演示和我的基于 Fragments 示例的应用程序中,从左侧片段列表中选择一个项目并显示在右侧片段中后,设备旋转到纵向显示列表片段而不是所选项目的详细信息片段,如 Gmail 中的。返回横向显示在右侧片段中再次显示所选项目。

API Demos 示例代码:http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/app/FragmentLayout.html

知道如何重新创建 Gmail 应用程序中显示的内容吗?

【问题讨论】:

    标签: 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 变量就会指向片段的视图。因此,从细节片段中的纵向旋转到横向再返回,视图仍然保留并正确显示。

      【讨论】:

        猜你喜欢
        • 2012-09-22
        • 1970-01-01
        • 1970-01-01
        • 2013-12-22
        • 1970-01-01
        • 2017-03-22
        • 2023-03-03
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多