【问题标题】:Composite Views and View Controllers复合视图和视图控制器
【发布时间】:2010-05-29 09:02:06
【问题描述】:

我对 Android 有点陌生,并且正在设计一个包含几个相当复杂的视图的应用程序。其中一个视图旨在包含一个复杂的视图,显示与模型对象相关联的信息并分离到几个不同的视图中;其导航旨在使用滑动效果来实现(即在屏幕上滑动手指以从一个屏幕遍历到下一个屏幕等)。视图本身将用于为不同类型的模型对象托管多组视图,但具有在它们之间重用的通用结构。举个粗略的例子,视图可能会显示一个人的信息(模型对象),显示几个细节视图:一般信息视图、爱好列表视图和其他个人列表视图与他们的社交网络相关联。相同的一般视图,当给定一个代表特定汽车的模型对象时,会给出几个不同的视图:带有细节的一般视图,包含该车辆照片图像的视图,表示可以从其购买的位置的视图,以及提供的视图相关汽车的列表。 (注意:这不是所涉及的真实数据,而是代表视图的一般意图)。子视图不会覆盖整个屏幕空间,并且视图中的其他功能应该是可见的并且能够与用户进行交互。

这里的想法是有一个可重用的通用视图结构,它将管理一组基于传递给视图的模型对象类型动态生成的子视图。

我正在尝试确定利用 Android 框架的适当方式,以便在不违反框架完整性的情况下最好地实现这一目标。基本上,我正在尝试确定如何将这个更大的视图组件化为可重用的单元(即一般视图、特定于模型的子视图控制器和单个详细视图)。更具体地说,我试图确定这个视图是最好设计为几个自定义视图类的组合还是几个活动类的组合。我见过几个自定义复合视图的例子,但它们通常用于组合简单的视图,没有复杂的控制器,也没有关注一般的 Activity 生命周期(即存储和检索与模型对象相关的数据,视情况而定)。另一方面,我见过的关于由多个活动组成的视图的唯一真实示例是 TabActivity 本身,并且不能以必要的方式进行自定义。

对于构建我的视图以实现我正在寻找的应用程序框架的适当方法,是否有人有任何建议?意见?活动?还有什么?

任何指导将不胜感激。提前致谢。

【问题讨论】:

    标签: android architecture view structure composite


    【解决方案1】:

    我正在尝试确定 适当的方式来利用 Android框架为了最好 在不违反 框架的完整性。

    手机的 RAM 和 CPU 非常有限。您的普通 Android 设备具有十年前的 PC 的功能,甚至更糟。请不要过度设计您的应用程序。

    更具体地说,我正在尝试 确定此视图是否最佳 设计为几个复合 自定义视图类或组合 几个 Activity 类。

    我会争辩“以上都不是”。如果您的目标是制作“自定义视图类”以分发给整个 Android 开发者社区,那是一回事。但是,对于您的情况,只需构建您的 Views - 不要将它们子类化。对于 Android 的View 系统,我绝对是“组合优于继承”的心态。

    恕我直言,Activity 是您的控制器(或者可能是演示者,一个 MVP,是更好的架构类比),布局 XML 及其组成部分 Views 是视图层,您的数据库是您的模型。

    【讨论】:

      【解决方案2】:

      我不确定我是否遵循了您所说的所有内容,显示流程的图表可能会有所帮助,但是..

      您通常一次只能看到一个 Activity。该活动负责呈现整个视图。我看到的唯一例外是弹出式警报样式窗口。以我的经验,这些往往有点慢。通常,每次更改页面时都会有一个新活动。听起来您的情况可能是每次总体视图发生变化时。

      但是,您可以轻松地拥有一些在各种活动中重复使用的布局。布局是可组合的,例如,您可以为您的详细布局设置一个布局,该布局包含在主布局中。

      【讨论】:

      • 我试图避免的是单个控制器需要了解可以显示的每种类型的模型对象。类似于使用 TabActivity 来管理多个活动(因此一次显示多个活动),每个活动都维护单个模型对象的视图集。这也意味着在我的情况下使用多个活动,但似乎没有一种典型的方式可以在 TabActivity 之外实现这一点,它不能以我需要的方式进行蒙皮。这完全清楚了吗?
      猜你喜欢
      • 2011-08-12
      • 2014-06-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多