首页 > 解决方案 > Kotlin 中 addTextChangedListener(TextWatcher) 无限循环上的 EditText settext

问题描述

我正在使用Kotlin。我需要检查EditText值并为该值添加一些逻辑并将值设置为相同的 EditText 每个字符。但不幸的是,它正在无限循环。我使用了下面的代码。

    EditText amount_txtAmount = findViewById(R.id.amount_txtAmount)

    amount_txtAmount.addTextChangedListener(object : TextWatcher {
        override fun onTextChanged(s: CharSequence, start: Int, before: Int, count: Int) {

        }

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

        }

        override fun afterTextChanged(s: Editable) {
            if (amount_txtAmount.text.toString().length > 0) {

                    var amount1 =   ValidationUtil.commaSeparateAmount(amount_txtAmount.text.toString())
                    Log.e("formatAmount-->", amount1)
                    amount_txtAmount.setText(amount1)                   

           }
        }
    })

请帮助如何克服无限循环。

标签: androidkotlin

解决方案


我不确定在回调中操作文本是最好的解决方案,但如果你想这样做,修复无限循环的一种可能方法是删除并添加侦听器

    override fun afterTextChanged(s: Editable) {
        if (amount_txtAmount.text.toString().length > 0) {

            amount_txtAmount.removeTextChangedListener(this)
            var amount1 =   ValidationUtil.commaSeparateAmount(amount_txtAmount.text.toString())
            Log.e("formatAmount-->", amount1)
            amount_txtAmount.setText(amount1)                   
            amount_txtAmount.addTextChangedListener(this)
        }
    }

推荐阅读