对不起我的英语。
将几个耦合任务[例如加载数据->显示数据(或具有重新加载数据能力的异常消息(]分成几个耦合片段是否好?
很多时候,我必须做这样的事情:
- 做一些长时间的事情并获得结果(例如,加载大数据(
- 如果发生异常,则显示异常消息并为用户提供重新加载数据的能力(例如,简单按钮重新加载(
- 否则,显示数据
例如,在谷歌Play商店中。 起初与服务器有一些通信。如果Android设备已关闭互联网连接,则显示有关它的消息,并且用户有机会重新加载数据。否则,显示应用内容。
在这种情况下,我通常如何做。
在活动中,我有一些容器(通常是一个(用于此和三个不同的片段(做一些长的事情,显示结果,显示异常(。
为了做一些长时间的事情,我用setRetainInstance(true)
创建了TaskFragment
(为了不处理屏幕旋转等(
如果我得到一个结果,那么我用ResultFragment
替换TaskFragment
(我在其中传递结果(。
如果我得到异常,那么我会用ExceptionFragment
替换TaskFragment
。ExceptionFragment
我显示异常描述和简单的按钮重试。单击此按钮时,我重新启动TaskFragment
(将ExceptionFragment
替换为TaskFragment
(。
即
_result________ [ ResultFragment ]
|
|
|
|
_request______[ TaskFragment ]
| |
| |
| exception
| request
| |_______________ [ ExceptionFragment ]
| |
| |
|___________________request___________|
不幸的是,我最近才有了这种经历。在此之前,我使用一个片段来加载和显示加载的数据。所以我不能使用setRetaintInstance(true)
,因为如果我使用它,那么我就不能为不同的设备配置(旋转等(使用不同的布局。我甚至编写了管理屏幕旋转的复杂片段类,以免中断我用来加载和显示加载数据的 AsyncTasks。
现在,当我来到我的新解决方案时,我发现它比以前使用得更好、更容易。它还提供了良好的工作分解。
对此,你怎么看?有没有更好的方法?
我认为这种方法没有任何问题。无论哪种情况,将数据放在无视图片段中正是您想要做的。它的优点是使您的数据超出屏幕翻转。如果要分离片段,则不必重新加载它。它将您的数据保存在您的活动中,因此您不必绑定到服务。 它还将逻辑保留在 Fragment 类中,并远离您的 UI,从而提高了长期可维护性。
您唯一可以考虑的(同样,这取决于您的设计(是不要让 TaskFragment 处理任何与 UI 相关的内容。 这意味着,不是任务片段添加ExceptionFragment
或ResultFragment
,而是让活动处理它。 这样TaskFragment
唯一的工作就是处理数据。它将 UI 逻辑与数据模型类分开。 您可以将回调注册到活动和片段可以在其各自的onResume()
方法中附加到的TaskFragment
,然后在onPause()
中分离