我有一个共同的任务,我做了一些活动 - 下载数据,然后显示它。我已经下载了下载部分;当然,由于在下载完成之前用户可能会改变方向或取消活动,但代码已存在,这有点棘手。有足够的代码处理这些情况,因此我不想将其复制/粘贴到每个活动中,因此我想创建一个抽象子类活动本身,以便它处理单个后台下载,然后启动一个方法用数据填充页面。在Android中进行子类化活动时,是否有设计模式可以减少代码重复?
这一切正常。问题是,由于单一继承,我不得不为任何其他类型的Activity重新创建完全相同的类 - 例如,我使用Activity,ListActivity和MapActivity。对所有三种使用相同的技术需要三个重复的类,除了每个类都扩展一个不同的Activity。
有没有可以减少代码重复的设计模式?就目前而言,我已经节省了大量的重复,但是我很难在三个类中看到完全相同的代码,这样每个代码都可以划分出不同类型的Activity。
编辑:因为它似乎我需要更具体一点...
假设我想在方位的变化,解决了的AsyncTask后台下载的问题。我现在的解决方案是使用回调;有我开始下载的下载管理器,然后我有Activity附加一个回调。当方向改变时,活动被销毁并重新创建;在此过程中,我分离旧的Activity的回调,然后在新的活动中添加新的回调。
方向更改是一个常见问题,并且在多个活动中,我会在数据加载时以进度视图开始活动。我试图解决的是不必重新执行这个方向处理逻辑十次;我最初的解决方案是子类化的活动,但后来我得到了上述问题。
我完全理解这个概念,但在这种情况下进行组合就意味着就像在每个类中实现它一样多的代码重复。每个类都必须实现onCreate(),onRetainNonConfigurationInstance(),onResume(),onPause(),onDestroy()并调用委托。我宁愿不必为我写的每个活动考虑这个实现方面。除此之外,我可以说服其他人,但在这种情况下,合成会导致同样多的重复,除非我错过了某些东西。 – 2010-04-06 18:13:44
Ick。这表明Android的活动太大,你可能无法控制。我想你可以用已经写好的函数(和assignDelegate()或其他)编写DelegatingActivity,并从中继承。正如你迄今为止所描述的那样,它与普通的Activity类相比没有多大优势,但它可以在后面付清。 – 2010-04-06 18:19:56
活动的工作方式是他们有不同的方法,在不同的状态下被调用(例如“onCreate()”和“onDestroy()”)。当你实现你自己的Activity时,你可以细分和扩展这些方法来定义行为。 你的文章给了我一个想法,它仍然创建各种活动的多个子类,但要让每个实现一个委托在其中;这样我就不会每次都执行相同的代码。尽管如此,我还是希望能够稍微减少混乱的解决方案。 – 2010-04-06 18:27:55