ViewPager 中的 Android Master/Detail 流程

Posted

技术标签:

【中文标题】ViewPager 中的 Android Master/Detail 流程【英文标题】:Android Master/Detail flow inside ViewPager 【发布时间】:2013-01-10 22:12:19 【问题描述】:

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

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

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

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

谢谢

【问题讨论】:

【参考方案1】:

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

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

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

    再声明 2 个片段:InnerListFragment、InnerDetailFragment。也是手机的 InnerDetailActivity。

    为 MasterFragment 声明 2 个 XML 布局文件:

    layout/fragment_master.xml - 仅在其中添加 InnerListFragment <fragment> 标记 layout-sw600dp/fragment_master.xml(适用于 >7" 的平板电脑) - 添加 InnerListFragment 和 InnerDetailFragment <fragment> 标签。

    现在,我不会在这里详细介绍您的所有 java 代码,但是在 MasterFragment.java 中,您需要检查设备是否是平板电脑,以便您知道屏幕上的 2 个片段中的哪一个处于活动状态。

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

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

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

【讨论】:

感谢您的快速回答!我将尝试按照您描述的方式实现它。我之前尝试将片段包装成另一个片段,但它在运行时崩溃说:Activity必须实现片段的回调。我在包装片段中实现了它,它不起作用。 :// 我在一个项目中完全使用了我上面描述的内容,并且工作起来就像一个魅力。如果您在任何时候遇到困难,请回来,我们会解决的。 这周我没有时间写代码,所以暂时停了下来。但是今天我明白了!一切正常。代码有点乱,但它可以工作,即使在 viewpager 中! :) 感谢您的帮助。

以上是关于ViewPager 中的 Android Master/Detail 流程的主要内容,如果未能解决你的问题,请参考以下文章

Android 仅使用支持库中的 ViewPager

android - 将数据从 Activity 传递到 ViewPager 中的 Fragment

为啥android中的ViewPager只能在V4 Support库中使用

ViewPager 特定版本中的 Settext 问题 - 5.1.1 android?

Viewpager Fragment中的Android Listview-不滚动

Android:从 viewPager 中的 Fragment 为 ListView 的适配器调用 getview()