【问题标题】:Is it a good idea for a Fragment to delegate all navigation control to Activity?Fragment 将所有导航控制委托给 Activity 是个好主意吗?
【发布时间】:2014-02-12 07:46:31
【问题描述】:
受Android developer guide 的启发,我正在尝试编写代码,其中所有片段都是自包含的(就网络/逻辑而言)以及它们执行的任何操作(单击/点击),这将导致启动一个新活动/片段将被委托给活动(通过回调)。
首先,它似乎是正确的。但是现在,当我有超过 1 个这样的小部件的片段(需要片段导航到新屏幕)时,它看起来像一团糟。我要么需要编写多个回调,要么在 Activity 中为片段上执行的不同操作执行一些 switch-case 逻辑。
如果这种设计听起来很糟糕,那么在哪些情况下实施回调(如指南所建议的那样)是个好主意?
【问题讨论】:
标签:
android
android-fragments
【解决方案1】:
我不知道你是如何实现这些回调的。
解决这个问题的一种方法是使用契约模式:
Jake Wharton 在a GitHub gist 中有此规范的实现。唯一没有显示的是托管他的MyCoolFragment 的活动需要实现MyCoolFragment.Contract 接口。
这假设每个片段都有不同的事件来引发活动,因此需要自己的接口。如果你有几个具有共同特征的片段,你可以在一个接口上标准化,而不是到处复制Contract。
还有其他方法(例如,关于 gist 的注释建议使用消息总线),但对于简单的片段->活动通信,合约模式在编码和运行时实现方面的开销应该最小。
不过,您将工作委派给可能导致对另一个片段进行更改的活动的一般方法绝对是一个好方法。当您处理不同的屏幕设置(手机与平板电脑、单屏与在连接的设备上显示内容)时,它可以更轻松地处理片段不在屏幕上的情况,可能由不同的活动托管电视等)。