本节目录:
- 主从用户界面
- 增加布局灵活性
- 使用别名系统
- fragment 回调接口
主从用户界面
本来对应手机设备,一般都是单版面,上图这种双版面可以叫做主从界面
增加布局灵活性
- 手机的布局都是单版面(single-pane)
- 在平板上,因为同时显示主从用户的界面,我们需要生成双版面(two-pane)布局
如何实现?
- 修改托管 fragment 的 setContentView 方法
- 创建两个 fragment 容器布局
- 修改托管的 Activity 实现在手机中显示单版面,在平板上实例化双版面
具体到项目:
- 修改布局,从单版面修改为双版面
- 给父类 SimpleFragmentActivity 中的加载 fragment 改为 获取布局的方法
- 分别给水平,垂直布局修改布局
- 覆写 getLayoutResID 返回 需要加载的布局
使用别名系统
别名系统是一种指向其他资源的特殊资源
- 在 res/values 创建refs.xml 别名资源文件
创建默认的别名资源值
123456<?xml version="1.0" encoding="utf-8"?><resources><item name="activity_masterdetail" type="layout">@layout/activity_fragment</item></resources>创建规定屏幕范围的资源值
上面两种别名资源,可以通过设备屏幕的大小改变不同的布局文件。
- 当屏幕小于 600dp 将使用 R.layout.activity_fragment 单版面布局
- 当屏幕大学 600dp 将使用 R.layout.activity_twopane
双版面的布局
fragment 回调接口
当我们在双版面的情况下,不在启动新的页面,在第一个页面的 fragment 中的点击事件获取第二个页面的 FragmentManager ,然后提交一个 fragment
事务,将第二个 Fragment 添加到双版面的布局。虽然这种方法行的通。fragment 天生是独立的开发构件。如果用 fragment 用来添加其他 fragment 到 activity 的 FragmentManager,那么这个 fragment 就必须知道托管 activity 是如何工作的。
托管 activity 将实现回调接口,履行托管 fragment 的任务
接口回调是用接口句柄来得到并调用实现这个接口的子类的引用
- 在 fragment 定义回调接口,托管 activity 强制转化为 CallBacks 对象并赋值给 CallBacks 类型变量(强制转化的目的是托管 activity 必须实现回调接口,这种机制将 fragment 需要完成的事务托管给 activity)
- 托管的 activity 实现 .CallBacks 接口
- 实现接口的方法,方法内写事务
实例:
- 当为手机设备,启动 activity
- 当为平板设备,将 fragment 放入 双版面的详情页面
以下是实现接口的回调方法
当点击不同列表,显示不同详情页,调用全部回调方法。
- 点击列表调用显示详情页的回调方法
- 点击添加按钮时,调用显示详情页的回调方法
回调函数刷新
- 将列表清单刷新私有方法改为公有方法
- 将详细面板创建 Callbacks 回调方法,并创建 onAttach()将 activity 赋值给 Callbacks 对象。frgament 结束方法 onDetach() 将 null 复制 Callbacks 对象
- 托管 activity 实现接口方法,并在方法中实现托管的代码