抱歉我的英文。
将几个耦合的任务分开是好的[例如加载数据 - >将数据(或具有重新加载数据能力的异常消息)]显示为几个耦合的片段?
我经常要做的事情是:
例如,在 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。
现在,当我来到我的新解决方案时,我发现它比以前更好更容易。它还提供了良好的工作分解。
你怎么看?有没有更好的方法呢?
答案 0 :(得分:1)
我认为这种方法没有任何问题。将数据放在无视碎片中正是您想要做的事情。它的优点是可以将数据保持在屏幕翻转之外。如果要分离碎片,则无需重新加载。它将您的数据保存在Activity中,因此您不必绑定到服务。它还将逻辑保留在Fragment类中,远离UI,从而提高了长期可维护性。
您唯一可以考虑的事情(再次,取决于您的设计)是不要让TaskFragment处理任何与UI相关的事情。这意味着,而不是添加ExceptionFragment
或ResultFragment
的TaskFragment,而是让Activity处理它。这样TaskFragment
唯一的工作就是处理数据。它会将UI逻辑与数据模型类分开。您可以在TaskFragment
方法中将活动和片段可以附加的onResume()
注册回调,然后分离到onPause()