将几个耦合的任务分成几个耦合的片段而不是在一个片段中完成所有工作是否更好?

时间:2014-10-15 21:12:09

标签: android android-fragments

抱歉我的英文。

将几个耦合的任务分开是好的[例如加载数据 - >将数据(或具有重新加载数据能力的异常消息)]显示为几个耦合的片段?

我经常要做的事情是:

  • 做一些事情并获得结果(例如,加载大数据)
  • 如果发生异常,则显示异常消息并授予用户重新加载数据的权限(例如,简单按钮重新加载
  • 否则,显示数据

例如,在 Google Play商店中。起初与服务器进行一些通信。如果Android设备不在互联网连接上,则显示有关它的消息,并且用户有机会重新加载数据。否则,显示应用内容。

在这种情况下我通常如何做。

在活动中我有一些容器(通常是一个)用于此和三个不同的片段(做一些事情,显示结果,显示异常)。

为了做一些事情,我使用TaskFragment创建setRetainInstance(true)(为了不处理屏幕旋转等)。

如果我得到了结果,那么我将TaskFragment替换为ResultFragment(我在其中传递结果)。

如果我收到例外,则将TaskFragment替换为ExceptionFragment。在ExceptionFragment中,我显示了异常说明和简单按钮再试一次。点击此按钮后,我重新启动TaskFragment(将ExceptionFragment替换为TaskFragment)。

                        _result________ [ ResultFragment ]
                       |   
                       |           
                       |
                       |
_request______[ TaskFragment ]
               |       |
               |       |
               |       exception
               |       request
               |       |_______________ [ ExceptionFragment ]
               |                                     |
               |                                     |
               |___________________request___________|

不幸的是我最近来到这个经历。在此之前,我使用一个片段来加载和显示加载的数据。所以我无法使用setRetaintInstance(true),因为如果我使用它,那么我就不能为不同的设备配置(旋转等)使用不同的布局。我甚至编写了用于加载和显示加载数据的复杂fragment class managing screen rotations so not to interrupt AsyncTasks

现在,当我来到我的新解决方案时,我发现它比以前更好更容易。它还提供了良好的工作分解。

你怎么看?有没有更好的方法呢?

1 个答案:

答案 0 :(得分:1)

我认为这种方法没有任何问题。将数据放在无视碎片中正是您想要做的事情。它的优点是可以将数据保持在屏幕翻转之外。如果要分离碎片,则无需重新加载。它将您的数据保存在Activity中,因此您不必绑定到服务。它还将逻辑保留在Fragment类中,远离UI,从而提高了长期可维护性。

您唯一可以考虑的事情(再次,取决于您的设计)是不要让TaskFragment处理任何与UI相关的事情。这意味着,而不是添加ExceptionFragmentResultFragment的TaskFragment,而是让Activity处理它。这样TaskFragment唯一的工作就是处理数据。它会将UI逻辑与数据模型类分开。您可以在TaskFragment方法中将活动和片段可以附加的onResume()注册回调,然后分离到onPause()