微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

addTextChangedListener 第二次不工作 - Android Kotlin Viewmodel

如何解决addTextChangedListener 第二次不工作 - Android Kotlin Viewmodel

在我的应用中,我有一个场景来显示 2 个不同的 UI。 所以我创建了一个根布局并向它添加视图。添加视图后,我调用一个函数来监听文本的变化。 以下是我的做法:

when (shapes) {
        Shapes.CIRCLE -> {
            var view = View.inflate(this,R.layout.layout_config_circle,null)
            layout_properties_container.addView(view)
            mainviewmodel.validateFields(edit_text_radius)
        }
        Shapes.RECTANGLE -> {
            var view = View.inflate(this,R.layout.layout_config_rectangle,null)
            layout_properties_container.addView(view)
            mainviewmodel.validateFields(edit_text_length,edit_text_width)

        }
        Shapes.SQUARE -> {
            var view = View.inflate(this,R.layout.layout_config_square,null)
            layout_properties_container.addView(view)
            mainviewmodel.validateFields(edit_text_size)
        }
    }

以及 viewmodel 中的 validateFields() 函数

fun validateFields(vararg editTexts: EditText) {
    editTexts.forEach {
        it.addTextChangedListener(object : TextWatcher{
            override fun beforeTextChanged(p0: CharSequence?,p1: Int,p2: Int,p3: Int) {
                println("before changed")
            }

            override fun onTextChanged(p0: CharSequence?,p3: Int) {
                if(editTexts.any { it.length()==0 }){
                    isValid.postValue(false)
                }
                else{
                    isValid.postValue((true))
                }
            }

            override fun afterTextChanged(p0: Editable?) {
                println("after changed")
            }

        })
    }
}

这是第一次对每个形状都有效。 如果我第一次加载圆形、矩形或正方形,它就可以工作。 如果我将它从矩形改回圆形,它就会停止工作。 我可以看到 addTextChangedListener 附加到编辑文本,但它从未出现在任何 textChanged 回调中。

请帮忙。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。