iis服务器助手广告广告
返回顶部
首页 > 资讯 > 移动开发 >android动态表单+dialogplus
  • 427
分享到

android动态表单+dialogplus

表单Android 2022-06-06 14:06:04 427人浏览 八月长安
摘要

Android动态表单+dialogplus动态表单其他说明其他的其他 写在前面的话 鉴于之前写了一篇动态表单是很早之前使用的东西,导致会误导很

Android动态表单+dialogplus动态表单其他说明其他的其他

写在前面的话 鉴于之前写了一篇动态表单是很早之前使用的东西,导致会误导很多android的学习的人,并且下载demo还因为当时资源必须设置积分的原因设置了积分,所以将之前的资源免费,并且本次demo资源也不会需要积分,各位放心食用。

动态表单

其实对于android原生的来说,动态表单并不友好,我们一般都是借助 RecycleView(ListView) 来实现,然后在界面绘制的时候想办法解决这个问题,所以今天我们也会使用这种方式,然后这儿就使用了第三方BaseRecyclerViewAdapterHelper ,不多说直接开始吧。

思路: 要对列表的item做处理,我们还是需要在Adapter方面着手,由于我们的动态表单用的每一个item都会是不一样的,所以我们需要用到分组布局; 准备: 我们首先考虑的是表单对象类‘即adapter需要传入的对象类’,我们在构建表单对象的时候我们需要考虑分组布局的参数值,我们还需要item需要的标题和值,以及多选的可选值等数据,所以我们构建的对象的数据需要如下:

   public final static int SWITCH = 0;
   
   public final static int SWITCHMORE = 3;
   
   public final static int EDIT = 2;
   
   public final static int TEXT = 1;
   
   public final static int TITLE = 4;
   
   public final static int TIME = 5;
   
   private boolean mast = false;
   private int type;
   private int id;
   private String name;
   private String value;
   
   private int editExp;
   
   private List values;
其中editExp适用于输入框的类型控制,values字段适用于单选多选的时候传入的参数对象,具体如下:
private String id;// 选项ID
private String value;// 选项值
private String other;// 选项其他参数 拓展可用,这儿可以直接换为泛型哦,这样就可以把我们需要的参数也传入进来

对象类准备好了,接下来就是布局,布局代码我就不贴了,都是比较简单的布局代码:准备常用的输入框、单选多选等;

adapter 这个是一个比较重要的类,我们基本上的逻辑都需要在此类实现,此类继承自BaseMultiItemQuickAdapter ,这个父类是可以自定义多布局,是非常实用的,具体的逻辑判断对象类传入进来的需要加载的布局类型 ,此处我们截取其中一段代码来分析:
// 首先取出我们绘制的item的类型和布局
	switch (helper.getItemViewType()) {
           case FORMBean.SWITCH:
               // 判断如果是单选 两项(是否)
               // 此处只是设置了是否必填,所以我加了*号
               DrawableUtils.setDrawable(mContext, helper.getView(R.id.czyw_from_item_select_title), item.isMast()? R.mipmap.icon_mast_r : R.mipmap.icon_mast_w);
               helper.setText(R.id.czyw_from_item_select_title, item.getName());
               // 拿到选择按钮
               Switch s = helper.getView(R.id.czyw_from_item_select_switch);
               // 设置按钮打开和关闭情况下对应的值
               s.setTextOn(item.getValues().get(0).getValue());
               s.setTextOff(item.getValues().get(1).getValue());
               // 判断是否有默认值,如果有则直接设置进入默认值
               if (!StringUtils.isTrimEmpty(item.getValue())) {
                   // 默认赋值
                   for (int i = 0; i  {
                       // 赋值
                       item.setValue(isChecked ? item.getValues().get(0).getId() : item.getValues().get(1).getId());
                   });
               } else {
                   // 禁止点击
                   s.setEnabled(false);
                   if (ObjectUtils.isNotEmpty(item.getValue())) {
                       for (int i = 0; i < item.getValues().size(); i++) {
                           if (item.getValue().equals(item.getValues().get(i).getId())) {
                               s.setChecked(i == 0);
                           }
                       }
                   }
               }
               break;
   }

按照上面分析的逻辑处理其他类型即可:判断类型-布局赋值-默认设置

使用 使用前需要准备数据,此处我贴出测试数据:
// 清除表单数据 可返回调用此方法重新构建
        formBeans.clear();
        // 选项值 单选
        values1 = new ArrayList();
        values1.add(new FormBean.FromValue("男(值)", "男"));
        values1.add(new FormBean.FromValue("女(值)", "女"));
        values1.add(new FormBean.FromValue("中性(值)", "中性"));
        values1.add(new FormBean.FromValue("未知(值)", "未知"));
        formBeans.add(new FormBean(FormBean.SWITCHMORE, 1, "性别", "未知(值)", values1));
        values1 = new ArrayList();
        values1.add(new FormBean.FromValue("0~20(值)", "0~20"));
        values1.add(new FormBean.FromValue("20~40(值)", "20~40"));
        values1.add(new FormBean.FromValue("40以上(值)", "40以上"));
        formBeans.add(new FormBean(FormBean.SWITCHMORE, 2, "年龄段", "0~20(值)", values1));
        // 输入框 字符串 整数 小数
        formBeans.add(new FormBean(FormBean.EDIT, 3, "情况描述", ""));
        formBeans.add(new FormBean(FormBean.EDIT, 4, "身高(cm)", "", 1));
        formBeans.add(new FormBean(FormBean.EDIT, 5, "体重(kg)", "", 2));
        values1 = new ArrayList();
        values1.add(new FormBean.FromValue("是(值)", "是"));
        values1.add(new FormBean.FromValue("否(值)", "否"));
        formBeans.add(new FormBean(FormBean.SWITCH, 6, "是否已婚", "否(值)", values1));
        values1 = new ArrayList();
        values1.add(new FormBean.FromValue("是(值)", "是"));
        values1.add(new FormBean.FromValue("否(值)", "否"));
        formBeans.add(new FormBean(FormBean.SWITCH, 7, "是否去过武汉", "否(值)", values1));
        // 多选
        values1 = new ArrayList();
        values1.add(new FormBean.FromValue("发烧(值)", "发烧"));
        values1.add(new FormBean.FromValue("咳嗽(值)", "咳嗽"));
        values1.add(new FormBean.FromValue("头晕(值)", "头晕"));
        values1.add(new FormBean.FromValue("头痛(值)", "头痛"));
        values1.add(new FormBean.FromValue("鼻塞(值)", "鼻塞"));
        values1.add(new FormBean.FromValue("全身乏力(值)", "全身乏力"));
        values1.add(new FormBean.FromValue("胸闷气短(值)", "胸闷气短"));
        values1.add(new FormBean.FromValue("呼吸困难(值)", "呼吸困难"));
        values1.add(new FormBean.FromValue("味觉失灵(值)", "味觉失灵"));
        values1.add(new FormBean.FromValue("嗅觉失灵(值)", "嗅觉失灵"));
        values1.add(new FormBean.FromValue("其他见备注(值)", "其他见备注"));
        formBeans.add(new FormBean(FormBean.TEXT, 8, "其他情况", "", values1));
        formBeans.add(new FormBean(FormBean.EDIT, 9, "备注", ""));

其中formBeans 就是adapter需要的对象,values1 就是多选单选的选项等。
然后我们只需要按照正常的adapter和recycleview来处理即可:

// 动态表单
rv.setLayoutManager(new LinearLayoutManager(this));
formAdapter = new FormAdapter(formBeans, true);
formAdapter.bindToRecyclerView(rv);

数据处理:我们只需要获取到adapter中的数据,对数据做遍历即可取出我们想要的数据:

// 获取数据
                        for (FormBean formBean : formAdapter.getData()) {
                            switch (formBean.getId()) {
                                case 4:
                                    // ID为4的数据 此处单独判断ID可用来判断是否是必传字段|电话号码验证 等逻辑操作
                                    // 例身高为必填 身高的ID我们设置了是4 就判断此处的Value是否为空,为空则提示 此为必填等
                                    // 也可将对应的字段填充到对象中
                                    break;
                            }
                            data.append(formBean.getName()).append("--->").append(formBean.getValue()).append("\n");
                        }
监听 监听其实也比较好处理,我们监听在adapter中处理即可,并且处理值等:
				// 获取到view添加监听
				view.setOnClickListener(v -> {
                       List beans = new ArrayList();
                       for (FormBean.FromValue value : item.getValues()) {
                           beans.add(new GridSelectBean(value.getValue(), value.getId()));
                       }
                       // 此处使用了dialogplus来处理选择布局
                       new ConfirmListDialog(mContext)
                               .setTitleStr("请选择")
                               .setList(beans)
                               .setConfirmListDialogListener(new ConfirmListDialogListener() {
                                   @Override
                                   public void onCheckSelect(List mList) {
                                   }
                                   @Override
                                   public void onCheckSingle(GridSelectBean bean, int position) {
                                   }
                                   @Override
                                   public void onItemClickListener(GridSelectBean bean, int position) {
                                       // 赋值
                                       item.setValue(bean.getValue());
                                       view.setText(bean.getTitle());
                                   }
                               })
                               .show();
                   });
其他说明

至此动态的加载表单算是结束了,布局可能有点丑陋,但是按照这个逻辑可以自己修改布局,所以问题不大。
最终效果图如下:
在这里插入图片描述

其他的其他

代码地址

项目除了android动态表单,通过adapter来实现,还包含了dialogplus的再次封装,让使用更便捷,还包含有控件实现可拖拽的监听事件。

最后结语:前人栽树后人乘凉,我只是那个在你们乘凉的时候递给你们板凳和瓜子的人,让你们在乘凉的时候能够更舒适和方便一些,所以最终还是要感谢各位大佬们的开源的库和项目能得以引用和借鉴

推荐本次使用的第三方的库:

1. BaseRecyclerViewAdapterHelper
2. dialogplus
3. AndroidUtilCode
4. baseAdapter


作者:liu_yifang


--结束END--

本文标题: android动态表单+dialogplus

本文链接: https://www.lsjlt.com/news/29605.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • android动态表单+dialogplus
    android动态表单+dialogplus动态表单其他说明其他的其他 写在前面的话 鉴于之前写了一篇动态表单是很早之前使用的东西,导致会误导很...
    99+
    2022-06-06
    表单 Android
  • Android AOP切面编程+动态权限申请
    AOP+动态权限申请 最近在利用AspectJ做埋点,突发奇想,能否也用类似方法做动态权限申请?发现可以。我来介绍一下我的思路。 AOP是什么 ...
    99+
    2022-06-06
    aop 动态 Android
  • react实现动态表单
    本文实例为大家分享了react实现动态表单的具体代码,供大家参考,具体内容如下 1.小要求 在工作中,我们也会碰到这样子的需求:在填写信息的时候,可以填写多个人名、多个需求、以及动态...
    99+
    2022-11-13
  • 动态可编辑表单项
    遇到的问题:业务需要用户输入对应的username以发送私信给指定对象 方案1-input 输入就完事了 缺陷:要输入,麻烦 发给: 方案2-select thymeleaf模板动态获取后端u...
    99+
    2023-09-03
    html thymeleaf
  • javascript怎么做到动态表单
    本篇内容介绍了“javascript怎么做到动态表单”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、表单元素的动态添加通常情况下,网站上的...
    99+
    2023-07-06
  • javascript如何做到动态表单
    随着互联网应用的不断发展,用户对于网站的交互体验要求越来越高。动态表单就是其中一个提高用户交互体验的重要方式。而 JavaScript 作为前端开发的一个必备技能,也能够很好地实现动态表单效果。本文将介绍 JavaScript 如何做到动态...
    99+
    2023-05-14
  • angular怎么动态生成表单
    在Angular中,可以使用动态表单生成器来动态生成表单。可以使用Angular的Reactive Forms或Template-d...
    99+
    2023-10-12
    angular
  • Android之AnimationDrawable简单模拟动态图
    Drawable animation可以加载Drawable资源实现帧动画。AnimationDrawable是实现Drawable animations的基本类。 ...
    99+
    2022-06-06
    动态图 动态 Android
  • Android动态添加menu菜单的简单方法
    从menu按键开始,涉及以下3个方法: 1、onCreateOptionsMenu(Menu menu)2、onPrepareOptionsMenu(Menu menu)3、o...
    99+
    2022-06-06
    方法 Android
  • react antd实现动态增减表单
    之前写动态表单遇到过坑,就是用index下标做key会导致bug,而且很严重! 今天有空写下文章记录下:怎么处理和逻辑 我用的是antd3的版本,3和4的表单有点不一样,不过差别应该...
    99+
    2022-11-12
  • Vue动态表单的应用详解
    概述 后台管理系统里面有非常多的表单需求,我们希望能够通过写一个json格式的数据,通过vue的循环动态地去渲染动态表单。并且能够在外部得到渲染出来的表单数据,从而做一个入库操作。 ...
    99+
    2022-11-12
  • vue怎么创建动态form表单
    这篇文章主要讲解了“vue怎么创建动态form表单”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“vue怎么创建动态form表单”吧!针对各个表单写好通用的组件,然后根据type用v-if来渲...
    99+
    2023-07-04
  • Android实现简单动态搜索功能
    目录前言一、addTextChangedListener二、本文案例1.介绍一下SearchView的一些方法2.准备数据3.初始化以及填充数据4.在SearchView中用户输入字...
    99+
    2022-11-13
  • Android 动态菜单实现实例代码
    Android 动态菜单 先上效果图 比较简单,主要就是属性动画的使用和坐标角度的小细节。 实现 实现效果: 图标按照路径一路缩放渐变过来即可。 核心代码 pri...
    99+
    2022-06-06
    菜单 动态 Android
  • vue实现动态表单动态渲染组件的方式(1)
    vue 实现动态表单/动态渲染组件的方式(一),供大家参考,具体内容如下 思路 先写好各个可能会出现的表单或者自定义的组件,引入。此时后端可能会给到一个对象型数组,每个对象有要渲染组...
    99+
    2022-11-13
  • vue实现动态表单动态渲染组件的方式(2)
    本文实例为大家分享了vue实现动态表单动态渲染组件的方式,供大家参考,具体内容如下 思路 先把所有可能出现的表单/组件写在主页面每个表单/组件的slot 属性值要与后端返回的表单/组...
    99+
    2022-11-13
  • vue+element如何创建动态form表单
    这篇文章主要为大家展示了“vue+element如何创建动态form表单”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“vue+element如何创建动态form...
    99+
    2022-10-19
  • BootStrap如何实现动态表单效果
    小编给大家分享一下BootStrap如何实现动态表单效果,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!html部分 &...
    99+
    2022-10-19
  • vue动态表单数据如何提交
    Vue动态表单数据可以通过以下步骤来提交:1. 在Vue组件中定义表单数据,可以使用data属性来存储表单数据。2. 使用v-mod...
    99+
    2023-05-29
    vue动态表单 vue
  • Android实现列表元素动态效果
    目录前言AnimatedList 介绍元素的插入和删除使用 GlobalKey 获取 AnimatedListState总结前言 列表是移动应用中用得最多的组件了,我们也会经常对列表...
    99+
    2022-11-13
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作