使用Android构建动态表单的解决方案

使用Android构建动态表单的解决方案,第1张

概述我实际上正在开发一个 Android应用程序,我应该根据JSON文档中包含的元数据显示动态表单.基本上它的工作方式(没有细节)是JSON文档代表一个表单的结构: { "fields": [ { "name": "fieldA", "type": "STRING", "minCharacters": 10 我实际上正在开发一个 @L_403_0@应用程序,我应该根据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 TitlelinearLayout.addVIEw(new TextVIEw(form.name));//Add form fIEldsfor(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.
>使用Litho by Facebook.

但在考虑这两个解决方案时,我会遇到多个问题:

>使用litho是一个很好的用例吗?或者使用RecyclerVIEw就足够了?
>我的观点如何?如果我使用回收模式,我是否能够保持每个字段的状态(甚至是屏幕外的那些字段),从而能够在不丢失数据的情况下保存表单?
>如果我使用回收模式显示一个表单,我将如何处理多个表单?我们可以嵌套RecyclerVIEw吗?表格需要像在垂直房车内一个接一个地显示,但如果表格本身是房车,我应该如何处理?

这更像是一个“良好实践”问题,并提供正确的方法或正确的方法来实现我的目标,而不是需要具有代码示例的特定答案等.

在此先感谢您的时间.

解决方法 在构建移动应用程序时,我想解决以下问题:

Is it a good use case to use litho? Or using a RecyclerVIEw is enough?

>视图是否正确回收:
对我们来说意味着什么是考虑,每个屏幕创建40-50个视图,当用户离开视图时,系统不应该标记GC的所有视图,而应该在某种存档列表中,并且我们需要它再次我们应该能够从它获取.

为什么我们需要这样做:GC是最昂贵的 *** 作,会导致应用渲染抖动,我们尝试通过不清除视图来最小化要调用的GC

为此,我想使用光刻,理由是here因为你的要求似乎有更多的变量counttypesreference

结论:litho 1,RecyclerVIEw 0

What about the state of my vIEws? If I use a Recycling pattern,would I be able to keep the state of each of my fIElds (even those off-screen) and so being able to save the form without losing data?

> Saving EditText content in RecyclerView这是一个组件,但同样的逻辑应该应用于复选框或radiobutton.或者在石油的状态维护中是here

结论:litho 1,RecyclerVIEw 1都有特定的API来实现状态维护

If I use a Recycling pattern to display one form,how would I handle multiple forms? Can we have nested RecyclerVIEw? Forms need to be displayed one after another like insIDe a vertical RV but if forms themselves are RV,how should I handle this?

>这必须通过用户体验和技术能力来解决:根据用户行为恕我直言,我不鼓励嵌套垂直滚动,但其他人能够实现它,你可以很容易地找到如何在SO中.最佳解决方案是在Andriod或litho的回收站视图中将水平滚动设置为here

注意:如果您需要了解实施细节,请将其作为单独的问题提出,我很乐意为您提供帮助

更新#1:

The issue with this is that with large forms (like >20 fIElds),it need to inflate lot of vIEws and the UI thread suffer a lot.

必须在后端执行UI创建/布局,只需在UI线程上添加视图即可.并且光盘做到了in-built.然而同样可以实现原生回收者视图,但是你必须离开UI线程并定期发布到UI.

总结

以上是内存溢出为你收集整理的使用Android构建动态表单的解决方案全部内容,希望文章能够帮你解决使用Android构建动态表单的解决方案所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1138940.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-31
下一篇 2022-05-31

发表评论

登录后才能评论

评论列表(0条)

保存