受Android开发人员指南的启发,我正在尝试编写代码,其中所有片段都是独立的(就网络/逻辑而言),而它们执行的任何操作(单击/点击)应导致启动新的活动/片段,委托给活动(通过回调)。
首先,这似乎是正确的。但是现在,当我的片段中包含多个这样的小部件(需要该片段才能导航到新屏幕)时,看起来就像一团糟。我要么需要编写多个回调,要么在Activity中针对片段上执行的不同操作执行一些切换用例逻辑。
如果此设计听起来很糟糕,那么在什么情况下实现回调(如指南所建议)将是一个好主意?
我不知道您如何实现这些回调。
解决此问题的一种方法是使用合同模式:
该片段定义了一个Contract
接口,任何托管活动都必须实现
当片段想要将控制权传递给活动时,它将在该接口上调用一个方法
杰克·沃顿(Jake Wharton)在GitHub gist中具有规范的实现。唯一未显示的部分是承载其MyCoolFragment
实现MyCoolFragment.Contract
接口需求的活动。
假设每个片段都有引发事件的不同事件,因此需要自己的接口。如果您有多个具有共同特征的片段,则可以在单个接口上进行标准化,而不必在Contract
各处重复。
还有其他方法(例如,对要点的评论建议使用消息总线),但是对于简单的fragment-> activity通信,无论在编码还是在运行时实现方面,协定模式都应具有最小的开销。
但是,将工作委派给可能会导致更改另一个片段的活动的一般方法绝对是个好方法。当您处理不同的屏幕设置(电话与平板电脑,单屏与在连接的设备上显示内容)时,它可以更轻松地处理碎片不在同一时间出现在屏幕上(可能由不同的活动托管)的情况。电视等)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句