在我的Android应用程序中,我有两个活动。
One Activity让用户拍照。此图片已保存,然后上传到服务器。服务器返回一些信息并将其显示在列表中。
其他活动是一个图库。用户可以选择图片,上传图片并在列表中获取相同的信息(与第一个活动相同)
我实施的方式是:
上传和信息任务是一个名为WebServiceTask
的单独AsyncTask。两个活动都执行此任务。
我创建了一个WebServiceTaskInvoker
接口,以便每个活动都可以指定preExecute,postExecute,progressUpdate上发生的事情。
问题是这两个活动在preExecute,postExecute和progressUpdate上完全相同,所以两个活动之间的代码重复。
OnPreExecute:两个活动都会检查互联网连接
OnProgressUpdate:两个活动都会更改TextView的文本
OnPostExecute:两个活动都创建一个动态ListView并填充 结果。
我该如何解决这个问题?
我知道一种方法是将两种活动合二为一,但形成过去的经验,我知道这很麻烦而且很混乱。
我可以将UI代码放在WebServiceTask
中,但这会导致紧密的凝聚力。
答案 0 :(得分:3)
为执行公共代码的两个活动实现基类。将活动实现为基类的子类以执行不同的代码。
答案 1 :(得分:1)
Catherine建议的替代方法是创建一个活动模式枚举。
启动活动时将此模式作为额外模式传递。
如果模式是MODE_GALLERY,则加载gallery.xml布局并填充它,如果没有则加载其他布局。
只需确保对公共视图使用相同的ID,一种简单的方法是在布局文件中使用include标记。
这样做的好处是,您只有一个活动文件,而不是子类化方法所需的三个活动文件。
你也可以使用片段,但我对这些片段没有任何经验,所以我不能再告诉你了。
最后一点,我会避免将UI代码放入任务中。