具体代码见:D:\code\FragmentBestPractice
FragmentBestPractice 项目
1、创建News类,包含title 和 content
2、创建布局文件news_content_frag.xml作为新闻内容的布局。需要将新闻内容设置成不可见,因为双页模式下,不点击新闻标题,不对新闻内容进行显示。
3、新建 NewsContentFragment 类,在类中加载 news_content_frag.xml 布局文件,并提供一个refresh(title,content)方法,用于对新闻标题和内容进行刷新,让内容部分的Fragment实时显示电机的新闻标题和新闻内容,此时需要把刚才隐藏的内容设置成可见。
4、新建一个NewsContentActivity,使用默认布局activity_news_content.xml,因为此前创建的新闻内容的Fragment 和 布局,都是在双页模式下使用的。如果想要打开单页模式,需要重新创建一个Activity。
5、在activity_news_content.xml中,直接引入 NewsContentFragment ,实现代码复用,直接将news_content_frag布局内容加载进来。
6、在 NewsContentActivity 中,使用之前用到的启动Activity的方式,来从之前都是新闻标题的Activity中获取到news的标题和内容信息,然后进行refresh刷新显示。
7、在单页模式和双页模式下,都创建了显示新闻内容的布局,现在需要创建一个用于显示新闻列表的布局,新建 news_title_frag.xml ,如何存放新闻列表,使用 RecyclerView控件,因此需要在news_title_frag.xml 布局文件中放置一个 RecyclerView 。
8、因为要使用 RecyclerView 需要设置RecyclerView 的子项布局,需要新建一个子项布局news_item.xml。由于我们想要的显示列表可以仅仅包含一个TextView来显示新闻标题。news_item只需要设置成一个TextView即可。
9、新闻列表和子项布局都已经创建好了,接下来需要一个用于展示新闻列表的地方。新建一个NewsTitleFragment作为展示新闻列表的Fragment。内部需要根据是显示类型是单页模式还是双页模式来进行分类型创建!!因此需要一个变量来进行判断。如何判断:
这个方法通过在Activity中能否找到一个id为newsContentLayout的View,来判断当前是双页模式还是单页模式,因此我们需要让这个id为newsContentLayout的View只在双页模式中才会出现。
10、如何只让newsContentLayout在双页模式下出现,需要借助限定符。
首先修改activity_main.xml 让它内部只显示一个新闻列表的 Fragment。
然后新建 layout-sw600dp文件夹,再新建一个 activity_main.xml ,里面同时接入两个Fragment,一个显示新闻列表的Fragment,另一部分使用FrameLayout,FrameLayout命名为newsContentLayout,仅在双页模式下存在,其中加载显示内容的 NewsContentFragment 。
11、双页模式和单页模式的布局都实现了。因为显示新闻列表使用了RecyclerView ,因此需要为RecyclerView 搭载适配器。
之前是将适配器写成一个单独的类,现在可以直接写成NewsTitleFragment的内部类,因为可以直接访问 判断为 单页模式和双页模式的变量。
12、设置好适配器之后,最后一步就是向RecyclerView 中填充数据。在onActivityCreated中设置
RecyclerView 的布局格式layoutManager,并且指定RecyclerView 的适配器,传入数据。