kongzue / DialogX

💬 DialogX dialog box component library, easy to use, more customizable, more scalable, easy to achieve a variety of dialog boxes. DialogX对话框组件库,更加方便易用,可自定义程度更高,扩展性更强,轻松实现各种对话框、菜单和提示效果,更有Material You、iOS、MIUI等主题扩展可选
Apache License 2.0
2.09k stars 217 forks source link

【功能建议】涉及menu选择部分的Dialog,建议添加泛型和转换规则接口,而不是单纯字符串插入 #420

Closed dylanZk1 closed 8 months ago

dylanZk1 commented 8 months ago

功能建议

需求描述:

目前我在做表单业务,有些选择初始数据并不是字符串,而是自定义的data类,选择后需要获取的是选项对应的data实例。而按目前的功能,默认只能插入字符串,这样就要做两次转换,逻辑上以及性能上都不太理想。如果可以插入自定义data以及转换规则接口,在显示的时候,单个item显示可以调用转换规则接口得到,选择的时候就可以直接获取到需要真实获取的数据,不再需要重新转换一遍

kongzue commented 8 months ago

你可能需要:

PopMenu.show("添加", "编辑", "删除", "分享")
        .setData("data", data)
        .setIconResIds(R.mipmap.img_dialogx_demo_add, R.mipmap.img_dialogx_demo_edit, R.mipmap.img_dialogx_demo_delete, R.mipmap.img_dialogx_demo_share)
        .setOnMenuItemClickListener(new OnMenuItemClickListener<PopMenu>() {
            @Override
            public boolean onClick(PopMenu dialog, CharSequence text, int index) {
                Object data = dialog.getData("data");
                // ...
                return false;
            }
        });
dylanZk1 commented 8 months ago

我不是这个意思,你理解错了。你举的例子相对简单。我举个例子。例如有多个选项:上海,山东,天津,深圳。这四个选项分别对应一个A的实例。我通过转换规则 B,可以得到对应选项的文本,例如A实例 a1通过 B 可以得到上海,以此类推。而我选中上海后需要得到的是a1这个实例,并不是上海。按照现在的功能,因为只支持字符串,我需要先将每个A实例经过B规则得到对应选项字符串,选中拿到选项字符串后,我又要将这个字符串经过B的逆过程得到a1,这样就很麻烦。我想要的是,将每个A实例,以及转换规则 B 直接插入,内部通过 B 转换得到选项,选中后直接拿到 A实例。也就是说,本来 menuList 是 LinkedList String,现在要变成 LinkedList A,在 viewHolder 中 调用 B 规则得到选项字符串

kongzue commented 8 months ago

dialog.setData 是不限制类型的,也就是说你可以传入你自己的 list,在 getData 后反得到这个 list,再通过 list.get(index) 即可获得对应的数据

dylanZk1 commented 8 months ago

可以是可以。但是这样有可能会带来show里面的list和data的list不一一对应。保险起见,最好还是改动一下。不过还是很感谢您耐心回复

stale[bot] commented 8 months ago

长时间未收到回复暂时关闭了此问题,若有疑问请继续回复。此消息来自于自动化 Issues 处理 Bot,若问题严重或紧急你也可以通过反馈群联系到我:590498789