我实际上正在开发一个 Android 应用程序,我应该在其上显示基于 JSON 文档中包含的元数据的动态表单。基本上它的工作方式(没有细节)是一个 JSON 文档代表一个表单的结构:
{
"fields": [
{
"name": "fieldA",
"type": "STRING",
"minCharacters": 10,
"maxCharacters": 100
},
{
"name": "fieldB",
"type": "INTEGER",
"min": 10,
"max": 100
},
{
"name": "fieldC",
"type": "BOOLEAN_CHECKBOX",
"defaultValue": true
}
...
],
"name": "Form A"
}
当应用程序收到其中一个 JSON 文档时,我实际上正在做的是它遍历每个字段并将其解析为适当的视图(EditText、Checkbox、自定义视图等),向视图添加一个标签(将能够轻松检索它)并将视图添加到LinearLayout
. 这是它实际工作方式的伪代码:
//Add form title
linearLayout.addView(new TextView(form.name));
//Add form fields
for(Field field: form.fields) {
View view;
switch(field.type){
case STRING: view = new EditText();
...
}
view.setTag(field.id);
linearLayout.addView(view);
}
这样做的问题是,对于大型表单(如 >20 个字段),它需要增加大量视图,并且 UI 线程会遭受很多损失。要考虑的另一点是单个屏幕可能有多种形式(一个接一个垂直排序)。
为了避免 UI 线程过载,我想到了 2 个可能的解决方案:
- 使用 RecyclerView。
- 使用Facebook 的 Litho。
但是在考虑这两种解决方案时,我想到了多个问题:
- 使用 Litho 是一个很好的用例吗?还是使用 RecyclerView 就足够了?
- 我的观点状态如何?如果我使用回收模式,我是否能够保持每个字段的状态(甚至是那些不在屏幕上的字段),从而能够在不丢失数据的情况下保存表单?
- 如果我使用回收模式显示一个表单,我将如何处理多个表单?我们可以嵌套 RecyclerView 吗?表单需要像在垂直 RV 内一样依次显示,但如果表单本身是 RV,我应该如何处理?
这更像是一个“良好实践”的问题,并给出了实现我的目标的正确方法或正确方法之一,而不是需要代码示例的特定答案等。
在此先感谢您的时间。