片段将所有导航控件委派给Activity是一个好主意吗?

Jag*_*uar 3 android android-fragments

Android开发人员指南的启发,我试图编写代码,其中所有片段都是自包含的(就网络/逻辑而言)以及它们执行的任何操作(单击/点击),这将导致启动新的活动/片段委托给活动(通过回调).

首先,它似乎是正确的.但现在,当我的片段有超过1个这样的小部件(需要片段导航到新的屏幕)时,它看起来像一团糟.我需要编写多个回调或在Activity中为片段执行的不同操作执行一些switch-case逻辑.

如果这个设计听起来很糟糕,那么实现回调(如指南所示)的情况会是个好主意?

Com*_*are 8

我不知道你是如何实现这些回调的.

解决此问题的一种方法是使用合同模式:

  • 该片段定义了一个Contract接口,任何托管活动都必须实现

  • 当片段想要将控制传递给活动时,它会调用该接口上的方法

杰克沃顿在GitHub的要点中有规范的实现.唯一未显示的部分是承载其MyCoolFragment实现MyCoolFragment.Contract界面需求的活动.

这假设每个片段都有不同的事件要引发活动,因此需要自己的接口.如果您有多个具有共同特征的片段,则可以在单个界面上进行标准化,而不是在Contract任何地方进行复制.

还有其他方法(例如,关于使用消息总线建议的要点的注释),但对于简单的片段 - >活动通信,合同模式在编码和运行时实现方面应该具有最小的开销.

但是,将工作委托给可能导致其他片段更改的活动的一般方法绝对是一个好方法.它可以更容易地处理片段不在屏幕上的情况,可能由不同的活动托管,因为您处理不同的屏幕设置(手机与平板电脑,单屏与显示连接的内容)电视等).