管理片段以分割导航

最近,我开始研究一个应用程序,该应用程序有一个主要活动和多个从一个容器中交换的子片段。

我的问题很简单:建议通过调用getActivity().getSupportFragmentManager().beginTransaction().replaceFragment()... ,或每个片段定义一个接口,让每个片段切换到UI流中的下一个片段主要活动实现并让主要活动处理应用程序的导航?

优点活动管理碎片

  • 片段不依赖于单个特定的活动,并且可以交换进出任意的布局,从而更易于维护。

  • UI导航代码集中在一个类中。

活动管理碎片

  • 活动将不得不实现大量的接口,混淆代码。 必须有一个比实现15个接口更好的方法,它们都表明片段已经完成,并准备好进入UI的下一个阶段。

  • 如果其他人阅读代码,UI导航并不那么直观。 考虑一个带有三个片段(称为A,B和C)的例子,并且假设片段A在某个动作上移动到B,并且在某个动作上B移动到C. 如果每个片段必须通过中间接口才能移动到下一个片段,那么这个流的方向是不明显的。

我提出的一个解决方案是拥有一个包含每个片段的回调函数的接口,而不需要大量的单独接口。 不过,我仍然觉得还有更好的办法。

有趣的问题,我不认为有一个完美的答案,这取决于很多事情。 但从我的经验来看:

我试图主要使用活动作为“控制器”,而片段代表“意见”。 所以最好让活动处理导航。 例如,当您想要创建平板电脑版本(在单个页面上合并几个片段)或更改应用程序的流程时,这有助于保持模块化并使生活更轻松。

但是,正如你在“cons”部分所说的那样,这导致了Activity中的很多代码。 如果您的应用程序中只有一个活动带有15个片段,则活动代码不会非常易读。

所以 – 尝试分组你的片段,并为每个组有一个活动。 例如,您可能有几个屏幕来“查看用户配置文件”和“编辑用户配置文件” – 这些都可能是UserActivity内的一个片段。 那么你可能有一个活动,比如说StoreDetailsFragment和StoreMapFragment,另一个活动是一个购买流程。

基本上,在Activity类中使用最少的代码是我的书中的一件好事 – 如果某些活动只包含一个片段,那我就没问题。

我写了一个项目,可以使片段导航容易:

https://github.com/fengdai/FragmentMaster

我在Kotlin创建了用于片段导航的库。 有能力使用堆栈或寻呼机或两者兼而有之。 用法很简单。 测试并用于生产代码。 文档尚未准备好,但您可以在设备上运行示例项目并查看代码。

https://github.com/zyvpeople/FragmentNavigation