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



对不起我的英语。

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

很多时候,我必须做这样的事情:

  • 做一些长时间的事情并获得结果(例如,加载大数据(
  • 如果发生异常,则显示异常消息并为用户提供重新加载数据的能力(例如,简单按钮重新加载(
  • 否则,显示数据

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

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

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

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

如果我得到一个结果,那么我用ResultFragment替换TaskFragment(我在其中传递结果(。

如果我得到异常,那么我会用ExceptionFragment替换TaskFragmentExceptionFragment我显示异常描述和简单的按钮重试。单击此按钮时,我重新启动TaskFragment(将ExceptionFragment替换为TaskFragment(。

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

不幸的是,我最近才有了这种经历。在此之前,我使用一个片段来加载和显示加载的数据。所以我不能使用setRetaintInstance(true),因为如果我使用它,那么我就不能为不同的设备配置(旋转等(使用不同的布局。我甚至编写了管理屏幕旋转的复杂片段类,以免中断我用来加载和显示加载数据的 AsyncTasks。

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

对此,你怎么看?有没有更好的方法?

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

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

最新更新