文章目录
我们希望用 Fragment Navigation 实现,点击某列表项时,MainActivity会使用一个CrimeFragment新实例来替换CrimeListFragment。
12.1 单 Activity-多 Fragment
activity 责任重大,负责响应用户事件,交替使用各个 fragment。
为维护 fragment 的独立性,我们将在 fragment 里面定义回调接口,把不该它做的事都交给它的托管 activity 来做。即像管理调度 fragment以及决定布局依赖关系这样的任务,就让托管 activity 通过实现 Callbacks 接口去完成。
12.1.1 Fragment 回调接口
要代理任务给托管 activity,被托管的 fragment 就要定义一个名为 Callbacks 的自定义回调接口。这个接口里定义的就是被托管的 fragment 要求它的托管activity做的工作。
对于这样的fragment,谁托管它,谁就得实现它定义的接口。有了这样的回调接口,fragment就能调用托管activity的函数了。至于是什么样的activity在托管它,它没必要知道。
当 fragment 附加到 activity 时,会调用 Fragment.onAttach(Context) 生命周期函数。这里我们把传给 onAttach(…) 的 Context 值参保存到 callbacks 属性里。既然 CrimeListFragment 是由一个 activity 托管着,那么传给 onAttach(…) 的 Context 对象就是托管它的 activity 实例。
现在,CrimeListFragment