正确实现Android的MVC

时间:2012-01-09 16:05:28

标签: android

谁知道iOS编程和数据源/委托范例会理解我。

在iOS中实现自定义视图的最佳做法:

  1. 实施从MyView
  2. 继承的UIView
  3. MyViewdataSource字段。
  4. drawRect:方法MyView上询问dataSource要绘制的项目。
  5. dataSource对象符合所需的协议并实现所需的方法。
  6. 实现UITableView的方式非常相似,但我现在还没有谈论细胞。

    您能告诉我使用MVC模式在Android中实现自定义视图(例如MyView)的最佳做法吗?

2 个答案:

答案 0 :(得分:4)

请参阅MVC pattern on Android

阅读所有答案以获得Android模式的圆形视图,因为我没有找到第一个非常有帮助。

已经针对阻止纯MVC实现的基本应用程序组件做出了设计决策,例如使用不允许层解耦的活动。

我发现以MVC方式查看Android应用程序会让人感到困惑,因为你最终会滥用活动和适配器等组件,试图调整它们以执行他们并不真正想要做的功能。

<强>更新

您需要使问题更具体一点,以获得一个好的答案,提供您需要的视图类型的详细信息(列表,网格,简单)以及您正在使用的模型类型(它们在哪里等待)

虽然这是相当主观的,但我在使用Android进行编程时发现了以下内容:

模特往往不可避免地变得愚蠢(anemic anti-pattern)。这可能是因为在很多情况下,您会发现适配器是以对象或集合的形式传递给视图中的内容,然后应该通过适配器对这些对象或集合执行操作,以便适配器知道它们何时出现已更改,可以相应地管理视图。

可以将适配器视为模型和视图之间的链接,如果您愿意,可以将控制器视为纯MVC控制器的许多优点。我发现自定义适配器可能是有效的(尽管如果从MVC角度查看它,最终会得到'fat controllers')。然后可以通过适配器方法调用任何调用内容更改的UI输入,这些方法将使用列表添加/删除或数据库的游标操作等编辑模型。

答案 1 :(得分:0)

要在Android中实现自定义视图,您应该从现有的View派生,然后覆盖您需要的方法,通常包括onDraw(),onMeasure(),以及可能包含一个或多个事件处理程序1

为了实现MVC的精神,组件所代表的数据不应该在视图类本身中,而应该在其他类中。确切的设计取决于您:您可以将数据存储在文件中,Java对象中,从内容提供者2中提取数据等。

绘图时(覆盖onDraw()),您应该查看数据的状态并进行相应的绘制;

处理更改数据的事件时,更改模型中的数据并调用视图上的invalidate()以请求重绘以反映更改。