Unity中的【Dropdown(包括TMP_Dropdown)下拉框当只有一个下拉值时多次点击 OnValueChange事件无效】的改进方法

news2024/11/30 0:39:16

Dropdown(包括TMP_Dropdown)下拉框当只有一个下拉值时,多次点击下拉框,并选择选项时, OnValueChange事件不响应

一、下拉框提供了一个【onValueChance】的事件接口

当下拉框值变化的时候,代表用户选择了新的值,于是执行对应逻辑

MyDropdown.onValueChanged.AddListener((idx) =>
        {
        		//响应用户选择的item逻辑    
        });

二、当下拉框只有一个item的时候,点选事件之后,选项值没有变化

请添加图片描述
在当前情形之下,用户onValueChanged事件无法响应,因为value没有改变,那么如何补救呢?

三、补救的方法

1、dropdown的工作原理

(1)如图【钻模】是一个dropdown,当用户没有点击它的时候,它的droplist是不显示的
在这里插入图片描述
(2)用户点击dropdown控件后,下拉框展开,实际上是动态生成下拉的item,如下所示:
在这里插入图片描述
(3)Dropdown List的构成如下所示:
每个展开的item,父节点都是一个Toggle,而且它的命名也很固定
[Item0:钻模],冒号前面是index,冒号后面选项的名字
在这里插入图片描述

2、拯救的方法

dropdown被点时,添加一下处理流程:

  • 【1】等下拉框展示
  • 【2】找到【Dropdown List】
  • 【3】找到【Dropdown List】下的【toggle】并绑定脚本
  • 【4】每个toggle绑定一个PointerClick事件:被点击时激发dropdown控件的onValueChanged事件

遵上所述,给dropdown控件(menuDropdown)添加以下代码:

/*
 *  ---- onValueChanged的bug ----
 *如果下拉框只有一个item,则value不能change,无法触发onValueChanged
 */

//用户点击下拉框中的toggle item时的事件处理
menuDropdown.GetComponent<EventTrigger>().AddListener(EventTriggerType.PointerClick,async (PointerEventData eventData) =>
    {
        //【1】下拉框展示
        Debug.Log("下拉框展示");
        await UniTask.DelayFrame(2); //等待2帧,让物体【Dropdown List】生成

        //【2】找到【Dropdown List】
        var droplist = menuDropdown.GetComponentsInChildren<Transform>(true)
            .First(x => x.name == "Dropdown List");

        Debug.Log($"物体Dropdown List = {droplist}");

        //【3】找到【Dropdown List】下的【toggle】并绑定脚本
        var toggles = droplist.GetComponentsInChildren<Toggle>(true);

        //【4】每个toggle绑定一个PointerClick事件:被点击时激发dropdown控件的onValueChanged事件
        foreach (var toggle in toggles)
        {
            Debug.Log(toggle.name);
            if (!toggle.GetComponent<EventTrigger>()) toggle.gameObject.AddComponent<EventTrigger>();
            toggle.gameObject.AddComponent<EventTrigger>().AddListener(EventTriggerType.PointerClick,
                async (PointerEventData eventData) =>
                {
                    Debug.Log($"点击的toggle为:{toggle.name}");
                    var idx = toggle.name.Split(":")[0].Replace("Item","");
                    Debug.Log($"点击的toggle 的 idx为:{idx}");

                    //** 如果只有一个下拉框,则主动触发一个onValueChanged事件 **
                    if (menuDropdown.options.Count == 1)
                    {
                        menuDropdown.onValueChanged.Invoke(int.Parse(idx));
                    }
                });
        }
    });

OnValueChange事件的绑定实现:

//用户选择
menuDropdown.onValueChanged.AddListener((idx) =>
{        
	//......  
});

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/619916.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【高级篇】分布式缓存

分布式缓存 – 基于Redis集群解决单机Redis存在的问题 单机的Redis存在四大问题&#xff1a; 1.Redis持久化 Redis有两种持久化方案&#xff1a; RDB持久化AOF持久化 1.1.RDB持久化 RDB全称Redis Database Backup file&#xff08;Redis数据备份文件&#xff09;&#xf…

计算机毕业论文内容参考|基于App的WiFi的网络定时开关的设计与实现

文章目录 导文文章重点前言课题内容、相关技术与方法介绍技术分析技术设计技术实现总结与展望本文总结后续工作展望导文 计算机毕业论文内容参考|基于App的WiFi的网络定时开关的设计与实现 文章重点 前言 随着智能化时代的到来,移动设备已经成为我们生活中不可或缺的一部分。…

《精通特征工程》学习笔记(4):分类变量:自动化时代的数据计数

1.分类变量 分类变量是用来表示类别或标记的。在实际的数据集中&#xff0c;类别的数量总是有限的。类别可以用数字表示&#xff0c;但与数值型变量不同&#xff0c;分类变量的值是不能被排序的。&#xff08;作为行业类型&#xff0c;石油和旅游之间是分不出大小的。&#xf…

java4.6 Spring Boot整合MyBatis

Spring Boot 整合MyBatis &#xff08;一&#xff09;基础环境搭建 1、数据准备 &#xff08;1&#xff09;创建博客数据库blog CREATE DATABASE blog&#xff08;2&#xff09;在博客数据库里创建文章表t_article CREATE TABLE t_article (id int(20) NOT NULL AUTO_INCR…

安全可以被“看见”吗?华云安的答案是“可以,且持续验证”

科技云报道原创。 近年来&#xff0c;随着攻防对抗技术的不断升级&#xff0c;安全运营市场“新贵”不断涌现&#xff0c;从安全信息和事件管理&#xff08;SIEM&#xff09;、扩展检测与响应&#xff08;XDR&#xff09;&#xff0c;到攻击面管理&#xff08;ASM&#xff09;…

地震勘探基础(十三)之地震资料解释

地震资料解释 地震资料解释&#xff08;seismic interpretation&#xff09;就是把经过采集和计算机处理后的地震数据转变为地质信息的过程。也就是由已知实际观测的地震数据反演地下地质特征的过程&#xff0c;因此地震资料解释也可称为地震反演。 根据地震资料类型不同&…

【python】 用来将对象持久化的 pickle 模块

pickle 模块可以对一个 Python 对象的二进制进行序列化和反序列化。说白了&#xff0c;就是它能够实现任意对象与二进制直接的相互转化&#xff0c;也可以实现对象与文本之间的相互转化。 比如&#xff0c;我程序里有一个 python 对象&#xff0c;我想把它存到磁盘里&#xff…

有什么好用的电容笔?好用的苹果平替笔

目前市面上的电容笔品类众多&#xff0c;面对琳琅满目的电容笔&#xff0c;很多人一时之间无从下手&#xff0c;不知道口碑比较好的电容笔是什么牌子&#xff0c;因此小编根据电容笔热卖榜&#xff0c;给大家整理了一期电容笔测评&#xff0c;希望能给大家选购电容笔带来帮助和…

3DVR全景技术引领乡村发展新时代!

导语&#xff1a; 在当代社会&#xff0c;科技的迅猛发展与数字化的浪潮已经深入到各个行业&#xff0c;带来了许多新的机遇与挑战。 数字乡村的概念逐渐引起人们的关注与热议。数字乡村作为现代化与传统农业的结合产物&#xff0c;以数字技术和虚拟现实&#xff08;VR&#…

格灵深瞳发布“深瞳阿瞳目”,体育课离AI越来越近

向上探索更普适的大语言模型&#xff0c;向下寻找更具体的应用场景&#xff0c;AI厂商正在这两条路上狂奔。 在众多应用场景中&#xff0c;教育是AI最重要的应用方向之一。中国有2.91亿在校学生、1844.37万专任教师、2800万台校园终端设备&#xff0c;庞大的用户体量汇聚了海量…

聊一聊关于视频缩略图缓存策略

作者&#xff1a;一只修仙的猿 最近回归android业务开发&#xff0c;开发了如下图的视频剪辑时间轴&#xff08;图源&#xff1a;剪映&#xff09;&#xff1a; 对于时间轴上的缩略图&#xff0c;需要去解码器加载获取。若每次都去解码器获取&#xff0c;会导致缩略图加载卡顿&…

webpack处理图片资源(jpeg,jpg,png等)

在webpack5以前&#xff0c;我们处理图片资源通过 file-loader 和 url-loader 进行处理 现在 Webpack5 已经将两个 Loader 功能内置到 Webpack 里了&#xff0c;我们只需要简单配置即可处理图片资源 webpack.config.js配置 {test: /\.(png|jpe?g|gif|webp)$/,type: "as…

Kubernetes高级存储

Kubernetes高级存储 PV PVC k8s支持的存储系统很多&#xff0c;全部掌握不现实。为了屏蔽底层存储实现的细节&#xff0c;方便用户使用&#xff0c;k8s引入PV和PVC两种资源对象。 PV(Persistent Volume)持久化卷&#xff0c;对底层共享存储的抽象&#xff0c;一般由k8s管理员进…

如何通过Shopee大数据选品,在3分钟选出热销爆款!

近年来&#xff0c;随着互联网技术的不断发展&#xff0c;人工智能和大数据成为越来越多人们熟知的概念。通过大数据分析进行选品&#xff0c;能够快速精准地预判各行业类目的变化趋势&#xff0c;帮助我们有效地优化选品、做出正确的销售决策。 大数据选品是指通过Shopee多品类…

Linux——进程地址空间

目录 1、程序地址空间 1.1 研究背景 1.2 程序地址空间 1.3 空间布局图代码测试 1.4 用户空间及内核空间 1.5 Linux及windows对比 1.6 分析Linux下虚拟地址及物理地址 2、进程地址空间 2.1 地址空间概念 2.2 地址空间及页表映射分析 2.3 写时拷贝及虚拟地址再次分析 …

【Flowable】Flowable网关

网关用来控制流程的流向 1.排他网关 排他网关&#xff08;exclusive gateway&#xff09;&#xff08;也叫异或网关 XOR gateway&#xff0c;或者更专业的&#xff0c;基于数据的排他网关 exclusive data-based gateway&#xff09;&#xff0c;用于对流程中的决策建模。当执行…

类脑计算讲解

当前&#xff0c;人工智能的发展有两个主要路径&#xff0c;一个是沿计算机科学发展而来的深度学习途径&#xff0c;另一个是沿着模仿人脑发展而来的类脑计算途径。 类脑计算途径 这个方向是以模拟人脑神经网络计算为基础而发展出的一种新型芯片&#xff0c;通过模拟神经元和…

直播商品库功能(互动功能接收端JS-SDK)

功能概述 图&#xff1a;边看边买--效果截图 本模块主要处理商品库相关逻辑&#xff0c;如展示商品、商品推送和商品上下架等消息。 初始化及销毁 在实例化该模块并进行使用之前&#xff0c;需要对SDK进行初始化配置&#xff0c;详细见参考文档。 在线文件引入方式 // scri…

【论文阅读】Lora

概述 目的在原有大模型上进行fine tune&#xff0c;训练个性化模型 idea&#xff1a;将pretrained model参数冻住&#xff0c;额外训练一个module进行调整&#xff0c;最终输出是原始输出经过module的输出。 技巧&#xff1a;通过低秩分解大大降低了需要训练参数的数量。矩阵…

简单AES加解密Demo——带你了解AES

1.AES简介 AES的全称是Advanced Encryption Standard&#xff0c;意思是高级加密标准。它的出现主要是为了取代DES加密算法的&#xff0c;因为我们都知道DES算法的密钥长度是56Bit&#xff0c;因此算法的理论安全强度是2的56次方。但二十世纪中后期正是计算机飞速发展的阶段&am…