美文网首页Android技术知识Android开发经验谈Android开发
最常用的集中选择Dialog,集合!集合!!

最常用的集中选择Dialog,集合!集合!!

作者: 鹿小纯0831 | 来源:发表于2018-08-29 16:52 被阅读40次
选择型dialog
如上图所示,用dialog来选择证件类型,在平时的使用中,类似的用法还有很多,比如,选择年月日、选择职业等等。选择型DialogDialog中最常见的。
本来觉得没必要做一个模块,但是后来遇到的情况越来越多,方式越来越复杂,想来想去,做个单独的模块还是很有必要的,每次在这个dialog的调试上面也是要花费不少时间的。

一、选择型Dialog的几种模式

单级单选模式
单级单选模式
单级,即列表只有一级;单选,即只选择一个。
这种是我们日常中最最常用的。
多级底部单选模式
多级底部单选模式
多级,即有子类或者说是有子节点;底部单选指的是只有最后一个节点可以点击,有子节点的选项是不可选的。如上图中,军官证和士兵证1可选,但是士兵证不可选。
以上模式主要应对的场景是不定级的选择时,要选择最精准的一个选项。比如杭州市的区县信息,这就是一个不定级的选择模型,不知道有多少级,但是要求要选择一个最准确的位置信息。
多级单选模式

同上图一样,区别在于不是只有底部可选,父节点也可选。
如上图的军官证和士兵证都可选。

单级多选模式
单级多选模式
顾名思义,单级列表中进行多选,点击确定返回信息列表。
多级多选模式
多级多选模式

需要注意的是,点击父节点时,子节点自动被选中。当子节点都被取消时,父节点自动被取消。

多选顺序模式
多选顺序模式

这是我遇到的一种比较特殊的需求,要求记录点击的顺序,输出跟点击顺序相同的列表。

二、简单的使用

单选

 new MultiSelectionDialogManager
                        .Builder()
                        //当前Activity
                        .setActivity(MainActivity.this)
                        .setTitle("证件类型")
                        .setCanceledOnTouchOutside(true)
                        .setDatas(CardTypeEnum.getDatas())
                        .setType(DialogType.SINGLE)
                        .setOnItemClickListener(new OnItemClickListener() {
                            @Override
                            public void onClick(Node node, int position) {
                                Toast.makeText(MainActivity.this, node.getName(), Toast.LENGTH_SHORT)
                                     .show();
                            }
                        })
                        .build().show();
多选
 new MultiSelectionDialogManager
                        .Builder()
                        //当前Activity
                        .setActivity(MainActivity.this)
                        .setTitle("证件类型")
                        .setCanceledOnTouchOutside(true)
                        .setDatas(CardTypeEnum.getDatas())
                        .setType(DialogType.MULTI)
                        .setOnClickListener(new OnClickListener() {
                            @Override
                            public void onPositive(List<Node> list) {
                                StringBuilder sb = new StringBuilder();
                                for (Node node : list) {
                                    sb.append(node.getName() + ",");
                                }
                                Toast.makeText(MainActivity.this, sb.toString(), Toast.LENGTH_SHORT)
                                     .show();
                            }

                            @Override
                            public void onNegative() {

                            }
                        })
                        .build().show();

选择型Dialog主要需要的数据有:

 /**
     * 四个个必填项
     */
    private Activity mActivity;
    private String title;//dialog标题
    private DialogType type;//dialog类型
    private List<Node> mDatas;//数据流

    private OnItemClickListener onItemClickListener;//选项点击事件
    private int mThemeColor;//主题颜色
    @DrawableRes
    private int mTopPic;//顶部图片
    private boolean canceledOnTouchOutside;//是否外部取消
    private OnClickListener onClickListener;//按钮点击事件
    private int limited;//当排序选择时候的限制个数

三、核心

选择型Dialog的核心自然就是Dialog了,之前选用的都是AlertDialog,谷歌官方建议我们使用DialogFragment,所有后期我就改成了DialogFragment,方便实现更多的效果,也避免了各种问题,dialog经常有各种各样的奇奇怪怪问题,做过的人肯定都深有体会。
另外一个核心就是动画效果,因为这次的目的主要在功能上,所以动画和美工上我调试的时间较少。其实动画效果在Dialog上还是很重要的,能够更好地和人进行交互,符合人的感官感受,不会显得那么突兀。细节方面也是很重要的。

四、版本

目前我已经发布了1.0.0版本,后期根据小伙伴的建议会慢慢增加一些视觉效果。另外代码肯定还是要再进行优化的,因为写得比较匆忙,感觉代码不是那么美观。
其实有时候写代码就是这样,一个思路形成了,后面就很难掰过来,顺着这个思路一直写到底,可能中途会觉得“会不会有更优秀的解决方案呢?”,但是一时就是想不起来,过一段时间突然又灵光一现,然后进行代码重构。
也希望小伙伴多提意见用于改进。

工程地址:选择型dialog:MultiChooseDialog

相关文章

  • 最常用的集中选择Dialog,集合!集合!!

    一、选择型Dialog的几种模式 单级单选模式 多级底部单选模式 多级单选模式 同上图一样,区别在于不是只有底部可...

  • Java基础之Collection集合

    标题常用集合 Java集合中,几个常用集合关系图 Collection单列集合中常用集中集合关系 Collecti...

  • Android常用Dialog集合

    http://blog.csdn.net/xiyou3g/article/details/51655100

  • 面试聊几句

    一.常用的集合 Collection下的List集合的话有ArrayList和LinkedList,Set集合常用...

  • JJJJJava集合

    集合与数组的区别 Collection集合的方法 常用集合的分类 Collection 接口的接口 对象的集合(单...

  • java基础-day15-集合和Object

    集合和Object 1. 集合 1.1 为什么要使用集合 1.2 集合结构简述 1.3 集合常用方法 【补充知识点...

  • 集合

    目录 集合简介 创建集合 集合常用方法 集合的运算 1. 集合简介 集合(set):一个无序不重复元素的集,基本功...

  • 2019-06-04

    RedisTemplate常用集合使用说明(一) RedisTemplate常用集合使用说明-opsForValu...

  • Android中的集合数据结构

    集合框架结构图 集合和数组的区别 Collection集合的方法 常用集合的分类 Collection 接口的接口...

  • 集合

    常用集合类 单列集合 Collection:Iterable 是单列集合类的根接口 Collection用于存储一...

网友评论

    本文标题:最常用的集中选择Dialog,集合!集合!!

    本文链接:https://www.haomeiwen.com/subject/vackwftx.html