0

在我的 Android 应用程序中,我有两个活动。

  • 一个活动让用户拍照。这张图片被保存下来,然后上传到服务器。服务器返回一些信息并将其显示在列表中。

  • 另一个活动是画廊。用户可以选择一张图片,上传它并在列表中获取相同的信息(与第一个活动相同)

我实现的方式是这样的:

  • 上传和信息任务是一个单独的 AsyncTask,称为WebServiceTask. 两个活动都执行此任务。

  • 我创建了一个WebServiceTaskInvoker界面,以便每个活动都可以指定 preExecute、postExecute、progressUpdate 上发生的情况。

问题是这两个活动在 preExecute、postExecute 和 progressUpdate 上几乎做同样的事情,所以两个活动之间存在代码重复。

  • OnPreExecute:两个活动都检查互联网连接

  • OnProgressUpdate:两个活动都会更改 TextView 的文本

  • OnPostExecute:两个活动都创建一个动态 ListView 并用结果填充它。

我怎样才能解决这个问题?

  • 我知道一种方法是将这两种活动合二为一,但根据过去的经验,我知道这很麻烦而且很混乱。

  • 我可以将 UI 代码放入其中,WebServiceTask但这会导致紧密的凝聚力。

4

2 回答 2

3

为执行公共代码的两个活动实现一个基类。将活动实现为基类的子类以执行不同的代码。

于 2013-07-16T21:52:10.177 回答
1

Catherine 建议的替代方法是创建一个活动模式枚举。

启动活动时将此模式作为额外的传递。

如果模式是 MODE_GALLERY 则加载 gallery.xml 布局并填充它,如果不是则加载其他布局。

只需确保对公共视图使用相同的 id,一种简单的方法是在布局文件中使用 include 标记。

这样做的好处是您只有一个活动文件,而不是子类化方法所需的三个活动文件。

您也可以使用片段,但我对这些没有任何经验,所以我无法进一步建议您。

最后一点,我会避免将 UI 代码放入任务中。

于 2013-07-16T22:36:46.647 回答