5

我遇到了一个我无法解决的问题,我google了很多但找不到解决方案。

在我的应用程序中,我有一个包含 3 页的 ViewPager。这些页面应该是片段。这工作正常。但是,其中两个页面必须是主/详细信息流(一个用于朋友列表,一个用于新闻提要)。当我使用 Eclipse 创建主/详细信息流时,会创建 2 个片段和 2 个活动。ItemListActivity(需要显示的那个)实现了fragment的Callbacks,这是一个Activity,但ViewPager只接受Fragment本身。

所以问题是:如何将 Master/Detail Flow 放在 ViewPager 中?

非常感谢所有帮助!我在这里完全没有想法。

谢谢

4

1 回答 1

11

Master/Detail Flow 只是在同一个内容视图中使用的 2 个片段的昵称,一个在左侧,一个在右侧。这是一般的想法。现在,Master/Detail Flow 可以在 Activity 中使用(就像 Eclipse 对您描述的模板所做的那样)或在 Fragment 中使用,幸运的是,因为 Android 4.2 在其他 Fragment 中引入了 Fragments(Android 兼容库也支持旧版本安卓)。

Eclipse 生成的模板包含在一个活动(在平板电脑上)或 2 个活动(用于手机)中,因为 Eclipse 不知道您需要片段内的主/详细信息。因此,您不能依赖 Eclipse 的模板。但是将 2 个 Fragment 放入另一个 Fragment 并不难。

您只需要暂时忘记 ViewPager,并在包含 Master/Detail Flow 的 Fragment 内完成您的工作,我们称之为 MasterFragment。

  1. 再声明 2 个 Fragment:InnerListFragment、InnerDetailFragment。也是手机的 InnerDetailActivity。
  2. 为 MasterFragment 声明 2 个 XML 布局文件:

    • layout/fragment_master.xml - 仅在其中添加 InnerListFragment<fragment>标记
    • layout-sw600dp/fragment_master.xml(用于平板电脑 >7") - 添加 InnerListFragment 和 InnerDetailFragment<fragment>标签。
  3. 现在,我不会在这里详细介绍您的所有 java 代码,但在 MasterFragment.java 中,您需要检查设备是否是平板电脑,以便您知道屏幕上的 2 个片段中的哪一个处于活动状态。

    • 如果是电话,则只有 InnerListFragment 可见。所以只需添加列表,onClickListener 将启动 InnerDetailActivity,您需要在其中放置 InnerDetailFragment。

    • 如果是平板电脑,则两个内部片段都是可见的。单击列表项时不要启动新活动,只需引用 MasterFragment 中的两个片段,以便您可以在它们之间进行通信。

这是一般的想法。如果您仍有疑问,请务必提问。

于 2013-01-27T13:48:22.397 回答