在ViewPager中实现Android的Master/Detail流程

5
我遇到了一个问题,无法解决。我在Google上搜索了很多,但找不到解决方法。
我的应用程序中有一个ViewPager,其中包含3个页面。这些页面是片段,它们应该是的。这个工作挺好的。然而,其中两个页面必须是主/细节流(一个用于好友列表,一个用于新闻提要)。当我使用Eclipse创建主/细节流时,会创建2个片段和2个活动。ItemListActivity(需要显示的活动)实现了片段的回调,这是一个活动,但是ViewPager只接受其内部的片段。
所以问题是:如何将主/细节流放入ViewPager中?
非常感谢所有帮助!我已经没有想法了。
谢谢
1个回答

11

Master/Detail Flow是两个Fragment在同一内容视图中使用的昵称,一个在左边,一个在右边。这是一个概括性的想法。现在,Master/Detail Flow可以在Activity(就像Eclipse为您描述的模板所做的那样)或Fragment内部使用,幸运的是,自从Android 4.2引入了Fragment嵌套其他Fragment(这也受到旧版本Android的Android兼容性库支持)。

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

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

  1. 声明2个更多的Fragments:InnerListFragment、InnerDetailFragment。还有一个 InnerDetailActivity 用于手机。
  2. 为MasterFragment声明两个XML布局文件:

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

    • 如果是手机,则仅显示InnerListFragment。因此,只需添加列表和onClickListeners将启动InnerDetailActivity,在其中需要放置InnerDetailFragment。

    • 如果是平板电脑,则两个Inner Fragments都可见。点击列表项时不要启动新的Activity,只需在MasterFragment中引用两个Fragments,以便它们之间进行通信即可。

这是一个概括性的想法。如果您还有问题,请随时提问。


谢谢您的快速回答!我会按照您描述的方式尝试实现它。之前我尝试将片段包装到另一个片段中,但在运行时崩溃并显示:Activity必须实现Fragment的回调。我在包装器片段中实现了它,但没有成功。 :/ - Gergely Sallai
1
我在一个项目中使用了我上面描述的内容,它工作得非常好。如果你在任何时候遇到困难,请回来,我们会一起解决。 - Bogdan Zurac
这个星期我没时间写代码,所以进展有点停滞了。但是今天我终于搞定了!现在一切都正常运行。虽然代码有点乱,但是它能够在viewpager中正常工作!:) 感谢你的帮助。 - Gergely Sallai

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接