EditText的On TextChange Listener问题。

问题描述 投票:0回答:1

在我的Recyclerview的Adapter类中,我做了如下的事情。

holder.mEdtDescription.addTextChangedListener(object : TextWatcher {
    override fun afterTextChanged(p0: Editable?) {
    }

    override fun beforeTextChanged(p0: CharSequence?, p1: Int, p2: Int, p3: Int) {
    }

    override fun onTextChanged(p0: CharSequence?, p1: Int, p2: Int, p3: Int) {
        listener.onDeleteOrDescribe(position, "" + holder.mEdtDescription.text.toString(), "describe")
    }
})

holder.mIvDelete.setOnClickListener {
    listener.onDeleteOrDescribe(position, "", "delete")
}

mEdtDescription 是EditText。

在从回收器中删除一些值时,我的适配器调用方法 onDeleteOrDescribe. 不幸的是,同时onTextChanged也在调用。

我怎样才能避免调用 onTextChanged 当我在删除什么东西的时候?

希望你能明白我的意思。

根据解决方案,我已经尝试禁用textWatcher,如下所示。

val textWatcher: TextWatcher = object : TextWatcher {
        override fun afterTextChanged(p0: Editable?) {
        }

        override fun beforeTextChanged(p0: CharSequence?, p1: Int, p2: Int, p3: Int) {
        }

        override fun onTextChanged(p0: CharSequence?, p1: Int, p2: Int, p3: Int) {
            ToastUtil.displayShortDurationToast(mContext,"called")
            listener.onDeleteOrDescribe(
                position,
                "" + holder.mEdtDescription.text.toString(),
                "describe"
            )
        }
    }
    holder.mEdtDescription.addTextChangedListener(textWatcher)

    holder.mIvDelete.setOnClickListener {
        //listener.onDeleteStep(position)
        holder.mEdtDescription.removeTextChangedListener(textWatcher)
        listener.onDeleteOrDescribe(position, "", "delete")
        holder.mEdtDescription.addTextChangedListener(textWatcher)
    }

但是,仍然是调用onTextChange():(。

android kotlin
1个回答
1
投票

你可以尝试暂时禁用TextWatcher。

val textWatcher :  TextWatcher = object : TextWatcher {
    override fun afterTextChanged(p0: Editable?) {
    }

    override fun beforeTextChanged(p0: CharSequence?, p1: Int, p2: Int, p3: Int) {
    }

    override fun onTextChanged(p0: CharSequence?, p1: Int, p2: Int, p3: Int) {
        listener.onDeleteOrDescribe(position, holder.mEdtDescription.text.toString(), "describe")
    }
}

holder.mEdtDescription.addTextChangedListener(textWatcher)

holder.mIvDelete.setOnClickListener {
    holder.mEdtDescription.removeTextChangedListener(textWatcher)
    listener.onDeleteOrDescribe(position, "", "delete")
    holder.mEdtDescription.addTextChangedListener(textWatcher)
}
© www.soinside.com 2019 - 2024. All rights reserved.