记录一个防重Toast

当我们已经对某个按钮做了防暴力点击,但是依然在业务上有些复杂交互的情况,需要我们封装一个防重Toast。针对这类情况,可以直接使用下面的showDebouncedToast


data class ToastInfo(val id: Any? = null,val command: MediaCommandDebouncer.MediaCommand? = null,val toastInfoId: Int = 0,val showTime: Long = 0L
)private var mShownToastInfo = ToastInfo()
private const val TOAST_DEBOUNCE_TIME = 1000L   //1s内不可弹出重复Toast 自定义/*** 防重Toast方法,用于无法使用防暴力点击的复杂场景* @param id 操作的内容的唯一标识* @param command 操作命令,可选* @param toastInfoId 字符串资源ID,-1代表网络异常,0代表无效值* @param msg 要显示的文本消息,优先使用这个参数*/
fun showDebouncedToast(id: Any? = null,command: Command? = null,toastInfoId: Int = 0,msg: String? = null
) {val currentTime = System.currentTimeMillis()// 防连弹检查if (mShownToastInfo.toastInfoId == toastInfoId &&mShownToastInfo.id == id &&mShownToastInfo.command == command) {val timeDifference = currentTime - mShownToastInfo.showTimeif (mShownToastInfo.showTime != 0L && timeDifference in 0..TOAST_DEBOUNCE_TIME) {Log.i(TAG, "Already show similar toast recently, skip: ${getToastMessage(toastInfoId, msg)}")return}}// 显示Toast 这里是自己封装的showToast,就不在这里展示了,直接使用makeText也可以when {msg != null -> showToast(msg)toastInfoId == -1 -> showSystemNoNetworkToast()toastInfoId != 0 -> showToast(toastInfoId)else -> Log.w("ToastManager", "Invalid toast parameters")}// 更新记录mShownToastInfo = ToastInfo(id, command, toastInfoId, currentTime)
}// 辅助方法,用于获取Toast消息(用于日志)
private fun getToastMessage(toastInfoId: Int, msg: String?): String {return msg?: if (toastInfoId == -1) {"Network error toast"} else if (toastInfoId != 0) {try {SkinManager.getInstance().getString(toastInfoId)} catch (e: Exception) {"Toast resource ID: $toastInfoId"}} else {"Unknown toast"}
}

比如说,当前我对某个内容的id执行了一个操作command,它需要弹出一个stringId为toastInfoId的文言,我需要预防短时间内同一个id弹出多个Toast的情况,就可以使用showDebouncedToast,调用方法:

//传R.string.xxxshowDebouncedToast(id, command, toastStringId)//传msgshowDebouncedToast(id, command, "some msg")

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

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

相关文章

在线测评系统---第n天

主要完成了退出登录前后的代码的实现,以及题目列表的查询1.退出登录前端引入了全局前置守卫,如果cookie里面没有token则直接跳转到login页面;有则直接跳转到layout页面,无需重新登录后端接收到退出登录,将token置为无效…

机器学习从入门到精通 - 卷积神经网络(CNN)实战:图像识别模型搭建指南

机器学习从入门到精通 - 卷积神经网络(CNN)实战:图像识别模型搭建指南 各位,是不是觉得那些能认出照片里是猫还是狗、是停车标志还是绿灯的AI酷毙了?今天咱们就撸起袖子,亲手搭建一个这样的图像识别模型!别担心不需要你…

python sqlalchemy模型的建立

SQLAlchemy 是一个功能强大的 Python SQL 工具包和对象关系映射(ORM)库,用于管理和操作关系数据库。它为 Python 开发者提供了一种用 Python 对象来运行和管理 SQL 数据库的方式。 目录 SQLAlchemy 的两个核心组成部分 SQLAlchemy 的主要功…

Rust中使用RocksDB索引进行高效范围查询的实践指南

在当今海量数据处理场景下,高效的范围查询能力成为许多系统的关键需求。RocksDB作为一款高性能的嵌入式键值存储引擎,其独特的LSM树结构和索引设计为范围查询提供了底层支持。本文将深入探讨如何在Rust中利用RocksDB的特性来实现高效范围查询,从键的设计原则到迭代器的工程实…

怎么做到这一点:让 Agent 可以像人类一样 边听边想、边说,而不是“等一句话 → 一次性返回”

要实现“边听边想、边说”,核心是把整条链路做成全双工、分片流式、可中断的流水线: ASR 连续吐字 →(短缓冲)→ LLM 连续出 token(可抢断)→ TTS 连续合成并播放(可打断/续播)。 下…

Ubuntu 22.04 网络服务安装配置

Ubuntu 22.04 网络服务安装配置 一键安装所有服务 # 更新系统 sudo apt update# 安装所有服务 sudo apt install -y openssh-server vsftpd telnetd inetutils-inetd ftp telnet# 启动所有服务 sudo systemctl start ssh vsftpd inetutils-inetd sudo systemctl enable ssh vsf…

【Unity知识分享】Unity实现全局监听键鼠调用

1、实现该功能前,优先学习Unity接入dll调用Window系统接口教程 【Unity知识分享】Unity接入dll调用Window系统接口 2、初始化动态连接库后,进行脚本功能实现 2.1 创建脚本KeyBoardHook.h和KeyBoardHook.cpp,实现功能如下 KeyBoardHook.h …

深度学习篇---MNIST:手写数字数据集

下面我将详细介绍使用 PyTorch 处理 MNIST 手写数字数据集的完整流程,包括数据加载、模型定义、训练和评估,并解释每一行代码的含义和注意事项。整个流程可以分为五个主要步骤:准备工作、数据加载与预处理、模型定义、模型训练和模型评估。# …

k8s集群搭建(二)-------- 集群搭建

安装 containerd 需要在集群内的每个节点上都安装容器运行时&#xff08;containerd runtime&#xff09;&#xff0c;这个软件是负责运行容器的软件。 1. 启动 ipv4 数据包转发 # 设置所需的 sysctl 参数&#xff0c;参数在重新启动后保持不变 cat <<EOF | sudo tee …

【Docker】P1 前言:容器化技术发展之路

目录容器发展之路物理服务器时代&#xff1a;一机一应用的局限虚拟化时代&#xff1a;突破与局限并存容器化时代&#xff1a;轻量级的革新技术演进的价值体现各位&#xff0c;欢迎来到容器化时代。 容器发展之路 现代业务的核心是应用程序&#xff08;Application&#xff09;…

WPF依赖属性和依赖属性的包装器:

依赖属性是WPF&#xff08;Windows Presentation Foundation&#xff09;中的一种特殊类型的属性&#xff0c;特别适用于内存使用优化和属性值继承。依赖属性的定义包括以下几个步骤&#xff1a; 使用 DependencyProperty.Register 方法注册依赖属性。 该方法需要四个参数&…

图生图算法

图生图算法研究细分&#xff1a;技术演进、应用与争议 1. 基于GAN的传统图生图方法 定义&#xff1a;利用生成对抗网络&#xff08;GAN&#xff09;将输入图像转换为目标域图像&#xff08;如语义图→照片、草图→彩图&#xff09;。关键发展与趋势&#xff1a; Pix2Pix&#…

Go 自建库的使用教程与测试

附加一个Go库的实现&#xff0c;相较于Python&#xff0c;Go的实现更较为日常&#xff0c;不需要额外增加setup.py类的文件去额外定义,计算和并发的性能更加。 1. 创建 Go 模块项目结构 首先创建完整的项目结构&#xff1a; gomathlib/ ├── go.mod ├── go.sum ├── cor…

What is a prototype network in few-shot learning?

A prototype network is a method used in few-shot learning to classify new data points when only a small number of labeled examples (the “shots”) are available per class. It works by creating a representative “prototype” for each class, which is typical…

Linux中用于线程/进程同步的核心函数——`sem_wait`函数

<摘要> sem_wait 是 POSIX 信号量操作函数&#xff0c;用于对信号量执行 P 操作&#xff08;等待、获取&#xff09;。它的核心功能是原子地将信号量的值减 1。如果信号量的值大于 0&#xff0c;则减 1 并立即返回&#xff1b;如果信号量的值为 0&#xff0c;则调用线程&…

25高教社杯数模国赛【B题超高质量思路+问题分析】

注&#xff1a;本内容由”数模加油站“ 原创出品&#xff0c;虽无偿分享&#xff0c;但创作不易。 欢迎参考teach&#xff0c;但请勿抄袭、盗卖或商用。 B 题 碳化硅外延层厚度的确定碳化硅作为一种新兴的第三代半导体材料&#xff0c;以其优越的综合性能表现正在受到越来越多…

【Linux篇章】再续传输层协议UDP :从低可靠到极速传输的协议重生之路,揭秘无连接通信的二次进化密码!

&#x1f4cc;本篇摘要&#xff1a; 本篇将承接上次的UDP系列网络编程&#xff0c;来深入认识下UDP协议的结构&#xff0c;特性&#xff0c;底层原理&#xff0c;注意事项及应用场景&#xff01; &#x1f3e0;欢迎拜访&#x1f3e0;&#xff1a;点击进入博主主页 &#x1f4c…

《A Study of Probabilistic Password Models》(IEEE SP 2014)——论文阅读

提出更高效的密码评估工具&#xff0c;将统计语言建模技术引入密码建模&#xff0c;系统评估各类概率密码模型性能&#xff0c;打破PCFGw的 “最优模型” 认知。一、研究背景当前研究存在两大关键问题&#xff1a;一是主流的 “猜测数图” 计算成本极高&#xff0c;且难以覆盖强…

校园外卖点餐系统(代码+数据库+LW)

摘要 随着校园生活节奏的加快&#xff0c;学生对外卖的需求日益增长。然而&#xff0c;传统的外卖服务存在诸多不便&#xff0c;如配送时间长、菜品选择有限、信息更新不及时等。为解决这些问题&#xff0c;本研究开发了一款校园外卖点餐系统&#xff0c;采用前端 Vue、后端 S…

友思特案例 | 食品行业视觉检测案例集锦(三)

食品制造质量检测对保障消费者安全和产品质量稳定至关重要&#xff0c;覆盖原材料至成品全阶段&#xff0c;含过程中检测与成品包装检测。近年人工智能深度学习及自动化系统正日益融入食品生产。本篇文章将介绍案例三&#xff1a;友思特Neuro-T深度学习平台进行面饼质量检测。在…