Edittext在用户完全输入完成之后,进行计算给当前edittext赋值等操作

今天遇到一需求,商品加入到采购单里面的问题

增加数量时,商品包含最少起订量(如最少买10个)

点击加减都是以10为单位加减,

输入框输入数量时,没有输入是的整数时,变为向下最近十的整数。

开始我把计算方式放在了onTextChanged 和afterTextChanged
没有用 mHandler.postDelayed(mRunnable, 800)
没输入一位,都回去计算,导致永远是0,
还有一种情况就是赋值后,检测到变化,继续赋值,陷入死循环中,

下方为正确的解决方法:

此计算放在edittext用户输入完毕后

			mHandler.removeCallbacks(mRunnable);
            //800毫秒没有输入认为输入完毕  计算入最少起订量是10  输入19 向下取整 10
            mHandler.postDelayed(mRunnable, 800)

			//计算完成后,给edittext赋值
 val mHandler = object : Handler() {
        override fun handleMessage(msg: Message) {
            super.handleMessage(msg)
            if (1 === msg.what) {
                var num = if (etNum.text.isNullOrEmpty()) 0 else Integer.valueOf(etNum.text.toString().trim())
                var num1 = Math.abs(num / minCount) * minCount
                if (minCount > 1 && num != num1) {
                        num = Math.abs(num / minCount) * minCount
                        etNum.setText("$num")
                        etNum.setSelection(etNum.text.length)
                }

            }

        }
    }
    val mRunnable = Runnable { mHandler.sendEmptyMessage(1) }

需要给Edittext添加监听,
editext.addTextChangedListener(watcher)
// 输入框内容监听
val watcher = object : TextWatcher {
override fun afterTextChanged(s: Editable?) {}

        override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) {}

        override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) {
          

            var num = if (etNum.text.isNullOrEmpty()) 0 else Integer.valueOf(etNum.text.toString().trim())
            if (num < 0) {
                etNum.setText("0")
                etNum.setSelection(etNum.text.length)
                num = 0
                ToastUtil.showCustomToast("不能在减少啦")
                tvSub.isEnabled = false
                tvAdd.isEnabled = true
            } else tvSub.isEnabled = true

            if (num > (data.actual_stock ?: 0) + (data.virtual_stock ?: 0)) {
                etNum.setText("${(data.actual_stock ?: 0) + (data.virtual_stock ?: 0)}")
                num = (data.actual_stock ?: 0) + (data.virtual_stock ?: 0)
                ToastUtil.showCustomToast("库存不足")
                tvSub.isEnabled = true
                tvAdd.isEnabled = false
                etNum.setSelection(etNum.text.length)
            } else tvAdd.isEnabled = true


            mHandler.removeCallbacks(mRunnable);
            //800毫秒没有输入认为输入完毕  计算入最少起订量是10  输入19 向下取整 10
            mHandler.postDelayed(mRunnable, 800)
            data.selectCount = num
            onNumChanged?.onChanged(holder.adapterPosition, num)

            //逻辑结束后,在加入监听
        }
    }
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值