0

我经常遇到一个问题,我的活动变成了难以阅读和维护的庞大的类。例如,如果我有一个搜索表单活动,就会发生很多事情。一些字段填充了来自 Web 服务调用的数据,一些字段响应对其他字段的操作、保存状态、恢复状态、处理用户输入等。

正如我所看到的,有几个选项可以改善这一点:

  1. 将活动分成几个片段,每个片段控制一组相关字段。这种方法有几个优点。这些片段可以很容易地在其他活动中重复使用,例如,如果您有一个基本搜索活动和一个高级搜索活动,则基本搜索片段可以在高级搜索活动中重复使用。您还可以获得生命周期挂钩,因此片段可以负责保存和恢复它自己的状态以及暂停和重新启动服务器调用等。这种方法的一个缺点是您不能在片段中包含片段。例如,如果您想使用片段视图分页器,则不能将这些较小的片段嵌套在较大的容器片段中以进入视图分页器。另外我不确定这是否符合片段的设计理念。

  2. 实施控制一组相关字段的自定义视图组。同样,这将具有从活动中删除与这些字段相关的大量代码的优势,并且您最终将获得一个可重用的 UI 组件。它还具有保存和恢复自身状态的能力。这样做的一个缺点是它仍然会与活动绑定以控制生命周期事件。此外,我不确定这些自定义视图组是否适合从 Web 服务或数据库调用中检索自己的数据、处理用户输入等。对我来说,自定义视图组应该只负责在 UI 上显示数据。

  3. 实现一个定制的 MVC 类型框架,其中活动从布局中获取视图并创建 POJO 控制器的集合,这些控制器负责填充字段、执行 Web 服务和数据库调用以及处理用户输入。这种方法的另一个缺点是活动仍将负责传播生命周期事件,以便控制器保存和恢复状态等。

我对其他人如何处理和解决这个问题很感兴趣?

谢谢

4

1 回答 1

1

如果我打算将部分 UI 用于手机和平板电脑,我喜欢使用 Fragments 来对这些职责进行分组。由于 Android 4.2 Fragments 的发布具有getChildFragmentManager方法,这允许嵌套片段,并且此方法也可通过支持库获得。

对于所有其他情况,我创建使用它们处理的 ViewGroup 创建的 POJO 控制器。如果他们需要来自 Activity 的特殊回调,您必须将此方法传递给控制器​​。这有时令人厌烦,但仍然比在活动生命周期回调方法中包含所有代码更干净。

于 2012-11-16T10:14:56.740 回答