这段代码应该放在哪里 - 在我的Activity或我的适配器中?

时间:2011-10-21 22:01:44

标签: android android-activity adapter

我正在寻找有关如何模块化代码的指导。我有一个活动和一个listAdapter,它们变得非常复杂。我不确定哪些代码应该存在于哪里以及这两个类中每个应该具有多少知识。您如何决定是将代码放入活动还是其适配器?您使用什么模式来保持这些课程尽可能精益?

2 个答案:

答案 0 :(得分:2)

您的描述过于通用,因此我无法给您一个确切的答案(有助于解释为什么它们变得越来越大,额外代码的优点是什么)。

但一般来说,只要想想每个班级应该做些什么。 “活动”(我看到它)是一个主控制器,它“知道每个人”,它将其他组件连接在一起(ListView与列表适配器)。列表适配器的目的只是将数据映射到视图。如果它们变大,则提取新的(实用程序)类。

例如,假设ListAdapter中的大部分代码格式化时间戳(例如,将时间戳作为长值,并根据当前时间创建类似“2小时前”的字符串)。然后创建一个名为TimeFormat的新实用程序类是有意义的(使用构造函数接受上下文,稍后需要它来获取字符串资源)。然后ListAdapter将创建此类的实例。

另一个例子是数据保存。在这种情况下,您可以创建一个名为“Model”或“Document”的类(同样使用带有“Context”实例的构造函数)。它将负责(例如)通过分析XML文件加载数据,并通过生成XML文件来保存数据。在这种情况下,该类将由活动实例化。

另请注意,ListAdapter应该真正做它应该做的事情:根据数据创建/设置视图。它永远不应该依赖于其他视图(在其他视图中它应该适用于任何布局文件中的任何ListView)。因此,如果您有“findViewById”调用,它访问ListView(或ListView本身)之外的视图,那么该代码应该移动到活动。

此外,如果有疑问,您可以尝试找到一个相对成熟的开源应用程序,并做类似的事情(并看看它是如何解决问题的。)

答案 1 :(得分:1)

根据android中的adapater documentation

  

Adapter对象充当AdapterView与该视图的基础数据之间的桥梁。适配器提供对数据项的访问。适配器还负责为数据集中的每个项目创建视图。

因此,如果您的代码与获取要显示的数据或创建视图有关,那么它就会进入适配器。其他所有内容都在Activity或者其他地方。如果您要花费大量代码检索要显示的信息,请考虑使用某种AsyncTaskLoader类。请注意,可以使用android compatibility package从小于3.0的API级别访问加载程序类。