Android模式:一个微调器,每个项目都启动一个不同的Activity

问题描述

|| 我正在尝试构建一个复杂的表单,其中几乎所有元素都是可选的。它仅从单个字段和一个“添加元素”按钮开始。当您单击添加时,表单显示可以添加到表单的元素类型的“ 0”(位置,照片,详细注释,“ \ now \”以外的时间戳等)。选择一个项目时,它将启动一个
Activity
,并且每个项目都有一个不同的关联associated1ѭ。 另外,每个选择都将具有几位数据,最好以某种方式将“ 1”存储为“ with”: icon0中的图标和显示名称 用于在db中存储数据的密钥(以及传递给Web服务的密钥) 用于在原始表单上显示结果的布局(即照片的缩略图,位置的经/纬度等) 我正在考虑一组类,这些类都扩展了一个抽象的
FormElement
类,并且对于上述每个额外的数据片段都具有静态元素。 (此解决方案的另一个缺点是静态情况下痛苦6英镑有多大。) 如何使它尽可能清洁和可维护?我真的不喜欢编辑五个不同的文件来向此表单添加新类型的元素。 (主要是因为我可以保证我会错过一个,并花费数小时来追踪错误。)     

解决方法

        一些提示... 单元测试将防止\“ unbugs \” :) 当每个“ 1”从用户那里获取所需的信息时,请使用包含每个类型数据的“ 8”来调用Activity#setResult()。
Intent
支持所有
Bundle
方法,因此您可以根据需要设置不同类型的数据。 要支持#2,请确保您使用的是
Activity#startActivityForResult(Intent,int)
来启动它,并在
Activity#onActivityResult(int,Intent)
中收听结果 我可能会维护与
SpinnerAdapter
(例如\14ѭ)一起使用的可用\“ element \”类型的列表,并在Adapter \ '17ѭ方法中调用诸如ѭ15static,
.getActivityClass()
等静态方法,以确定要处理的内容显示以及要启动的活动。 这样,您的列表实际上将包含诸如
{ MyPhotoElement.class,MyTextElement.class,MyDateElement.class,...}
)。 将每个元素添加到表单后,将其添加到
ArrayList<AbstractFormElement>
中,它将用于支持另一个适配器以
ListView
。该适配器将根据其对象的类型调度自定义视图布局的膨胀,并创建ViewHolder,这将要求每个不同的
AbstractFormElement
都具有自己的“视图类型”。适配器。请参见BaseAdapter#getItemViewType(int)和相关的
getViewTypeCount()
。 值得注意的是,只有当一个不能转换为另一种时,这些视图才需要不同的视图类型。例如,如果您有两个\“ Elements \”只需要在列表中显示文本字符串,它们都可以共享一个“纯文本”视图类型。同样,仅显示照片的两个元素,或可以轻松地将它们彼此转换的元素(例如,带有标题的图标与不带标题的照片缩略图)可以共享一个“图像加标题”视图类型。 考虑到上述情况,您实际上最终将不得不修改不同的文件以添加新的类型(嗯,从技术上讲,您可以将它们全部作为一个内部类存储在一个文件中,但是实际上并没有很好的论点这样做),但是如果您正确地完成了接口API并遵循良好的OO实践并实施了良好的单元测试,则将大大减少查找错误所需的工作量-仅仅是因为大多数事情如果执行不正确,则涉及添加新类型实际上会导致编译器错误。除此之外,一个适当的单元测试套件将能够以编程方式添加所有可能的类型,并确保所有内容都能正确显示,并且您应该拥有一个相当简化的过程以易于扩展:) 这听起来像是很多工作,一开始看起来似乎很乏味和冗长。但是最终结果实际上更易于维护,尤其是在元素类型列表相当广泛的情况下。     

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...