android获取EditText内容,TextWatcher按条件触发

devtools/2025/2/3 3:30:16/

android获取EditText内容,TextWatcher按条件触发

    • 背景:
    • 解决方案:
    • 效果:

背景:

最近在尝试用原生安卓实现仿element-ui表单校验功能,其中涉及到EditText组件内容的动态校验,初步实现功能后,发现重置按钮逻辑异常:
请添加图片描述理想情况下,重置按钮触发后,会将所有内容清空,不会触发校验逻辑,观察当前重置逻辑(此处以活动名称为例):

	private EditText activityName;private void handleResetEvent() {// 点击重置按钮resetBtn.setOnClickListener(v -> {activityName.setText(null);});}private void setActivityNameEvent() {// 活动名称添加内容改变后监听 触发校验活动名称activityName.addTextChangedListener(new TextWatcher() {@Overridepublic void beforeTextChanged(CharSequence s, int start, int count, int after) {}@Overridepublic void onTextChanged(CharSequence s, int start, int before, int count) {}@Overridepublic void afterTextChanged(Editable s) {verifyActivityName();}});}private void verifyActivityName() {if (StringUtils.isEmpty(activityNameValue)) {activityNameTip.setText("请输入活动名称");createVerifyPass = false;} else {if ((activityNameValue.length() < 3 || activityNameValue.length() > 5)) {activityNameTip.setText("长度在3到5个字符");createVerifyPass = false;} else {activityNameTip.setText(null);}}}

debug调试发现走activityName.setText(null);就会马上触发afterTextChanged,进而调用verifyActivityName(),是同步的方法调用,咱们的需求需要在手动修改EditText组件时能够触发校验,而点击重置按钮时EditText组件内容置空不触发校验。

解决方案:

考虑新增一个标识resetBtnClickFlag用来识别当前的动作是否为重置,如果为重置则不触发具体的提示校验:

	private EditText activityName;private boolean resetBtnClickFlag = false;private void handleResetEvent() {// 在重置按钮逻辑开始和结束分别设置重置标识开启和关闭resetBtn.setOnClickListener(v -> {resetBtnClickFlag = true;activityName.setText(null);selectArea = null;selectDate = null;selectTime = null;timelyDelivery.setChecked(false);onlineActivity.setChecked(false);pushActivity.setChecked(false);offlineActivity.setChecked(false);brandExposure.setChecked(false);onlineBrandSponsorship.setChecked(false);offlineFree.setChecked(false);eventFormat.setText(null);resetBtnClickFlag = false;});}// 在控制提示信息的具体方法补充重置标识逻辑private void verifyActivityName() {Editable activityNameValue = activityName.getText();if (!resetBtnClickFlag && StringUtils.isEmpty(activityNameValue)) {activityNameTip.setText("请输入活动名称");createVerifyPass = false;} else {if (!resetBtnClickFlag && (activityNameValue.length() < 3 || activityNameValue.length() > 5)) {activityNameTip.setText("长度在3到5个字符");createVerifyPass = false;} else {activityNameTip.setText(null);}}}

效果:

请添加图片描述


http://www.ppmy.cn/devtools/155612.html

相关文章

pytorch使用SVM实现文本分类

人工智能例子汇总:AI常见的算法和例子-CSDN博客 完整代码: import torch import torch.nn as nn import torch.optim as optim import jieba import numpy as np from sklearn.model_selection import train_test_split from sklearn.feature_extraction.text import Tfid…

Python | Pytorch | 什么是 Inplace Operation(就地操作)?

如是我闻&#xff1a; 在 PyTorch 中&#xff0c;Inplace Operation&#xff08;就地操作&#xff09;是指直接修改 Tensor 本身&#xff0c;而不是创建新的 Tensor 的操作。PyTorch 中的 Inplace 操作通常会在函数名后加上 _ 作为后缀&#xff0c;例如&#xff1a; tensor.ad…

MongoDB 删除文档

常用的删除文档方法包括 deleteOne()、deleteMany() 以及 findOneAndDelete()。 使用场景&#xff1a; 数据清理&#xff1a;删除不再需要的旧数据或无效数据。数据修正&#xff1a;在数据修正过程中删除错误的或重复的文档。自动化任务&#xff1a;在自动化脚本或任务中&…

Games104——游戏引擎Gameplay玩法系统:基础AI

这里写目录标题 寻路/导航系统NavigationWalkable AreaWaypoint NetworkGridNavigation Mesh&#xff08;寻路网格&#xff09;Sparse Voxel Octree Path FindingDijkstra Algorithm迪杰斯特拉算法A Star&#xff08;A*算法&#xff09; Path Smoothing Steering系统Crowd Simu…

答疑解惑:如何监控EMC unity存储系统磁盘重构rebuild进度

近期有个朋友咨询的问题&#xff0c;这个其实很有代表性的&#xff0c;以前在VNX存储中&#xff0c;通过磁盘的属性是可以看到rebuild的进度的。到了unity年代&#xff0c;更换了一个磁盘&#xff0c;如何查询重构的进度&#xff0c;从图形界面好像没有找到合适的地方去查看。 …

kamailio-ACC_JSON模块详解

ACC_JSON 模块 作者 Julien Chavanton jchavantongmail.com Julien Chavanton flowroute.com jchavantongmail.com 编辑 Julien Chavanton flowroute.com jchavantongmail.com 版权 © 2018 Flowroute.com 目录 管理员指南 概述依赖 2.1 Kamailio 模块 2.2 外部库或应用…

蓝桥杯刷题DAY1:前缀和

所谓刷题&#xff0c;讲究的就是细心 帕鲁服务器崩坏【算法赛】 “那个帕鲁我已经观察你很久了&#xff0c;我对你是有些失望的&#xff0c;进了这个营地&#xff0c;不是把事情做好就可以的&#xff0c;你需要有体系化思考的能力。” 《幻兽帕鲁》火遍全网&#xff0c;成为…

软件测试—— 接口测试(HTTP和HTTPS)

软件测试—— 接口测试&#xff08;HTTP和HTTPS&#xff09; HTTP请求方法GET特点使用场景URL结构URL组成部分URL编码总结 POST特点使用场景请求结构示例 请求标头和响应标头请求标头&#xff08;Request Headers&#xff09;示例请求标头 响应标头&#xff08;Response Header…