当前位置: 首页 > article >正文

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

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() {
            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after) {
            }

            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {
            }

            @Override
            public 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.kler.cn/a/525857.html

相关文章:

  • 推动知识共享的在线知识库实施与优化指南
  • 【apt源】RK3588 平台ubuntu20.04更换apt源
  • 小程序-视图与逻辑
  • games101-作业2
  • 【Redis】List 类型的介绍和常用命令
  • 【实践案例】使用Dify构建文章生成工作流【在线搜索+封面图片生成+内容标题生成】
  • 图论——floyd算法
  • 【Numpy核心编程攻略:Python数据处理、分析详解与科学计算】1.23 数据工厂:高级初始化模式解析
  • 【letta】The Letta Platform LETTA平台
  • 脚本运行禁止:npx 无法加载文件,因为在此系统上禁止运行脚本
  • 71-《颠茄》
  • 知识库管理系统助力企业实现知识共享与创新价值的转型之道
  • Rust语言进阶之filter用法实例(九十四)
  • 青少年编程与数学 02-008 Pyhon语言编程基础 06课题、字符串
  • SpringBoot 日志与配置文件
  • 智能家居环境监测系统设计(论文+源码)
  • 【Pandas】pandas Series cumprod
  • mysql重学(一)mysql语句执行流程
  • 【AI论文】Transformer^2: 自适应大语言模型
  • 数据库备份、主从、集群等配置
  • 【信息系统项目管理师-选择真题】2009上半年综合知识答案和详解
  • 【游戏设计原理】94 - 解决问题的方法
  • 赚钱的究极认识
  • INCOSE需求编写指南-附录 D: 交叉引用矩阵
  • Vscode编辑器下 Markdown无法显示图片
  • Docker小游戏 | 使用Docker部署RPG网页小游戏