关于RecycleView item中EditText数据错乱问题解决
场景描述 盘点药品需要输入实盘数量并限制输入的药品不能超过实际药品数量
我这边监听了editText的输入动作,在调用选中状态时刷新条码出现数据错乱

出现数据错乱的原因其实是因为在设置edittext.setText()的时候重复调用了TextWatcher
解决思路,我们只需要在editText获取焦点的时候去设置editText的addTextChangedListener(textwatcher)动作,当我们的EditText失去焦点时移除掉removeTextChangedListener(textwatcher)
废话不多说上代码
这里面是adapter中代码
//解决editext数据错乱
var editText = holder?.getView<EditText>(R.id.et_num)
holder?.getView<EditText>(R.id.et_num)?.setText(t.useNum)
val watcher: TextWatcher = object : TextWatcher {
override fun beforeTextChanged(sequence: CharSequence, i: Int, i1: Int, i2: Int) {}
override fun onTextChanged(sequence: CharSequence, i: Int, i1: Int, i2: Int) {}
override fun afterTextChanged(editable: Editable) {
//通过接口回调将数据传递到Activity中,修改list里的bean
var toString = editable.toString()
if (TextUtils.isEmpty(toString)) {
if (editText?.hasFocus()!!) { //如果获得焦点再去回调
mTextListener?.onTextChanged(position, "0.00")
}
} else {
if (editText?.hasFocus()!!) { //如果获得焦点再去回调
mTextListener?.onTextChanged(position, editable.toString())
}
}
}
}
//设置EditText的焦点监听器判断焦点变化,当有焦点时addTextChangedListener,
// 失去焦点时removeTextChangedListener
editText?.onFocusChangeListener = View.OnFocusChangeListener { _, hasFocus ->
if (hasFocus) {
editText?.addTextChangedListener(watcher)
} else {
editText?.removeTextChangedListener(watcher)
}
}
}
private var mTextListener: onTextChangeListener? = null
interface onTextChangeListener {
fun onTextChanged(pos: Int, str: String?)
}
//设置Edit监听
fun setOnTextChangeListener(onTextChangeListener: onTextChangeListener) {
this.mTextListener = onTextChangeListener
}
Activity中代码如下
adapter?.setOnTextChangeListener(object : PanDianAdapter.onTextChangeListener{
override fun onTextChanged(pos: Int, str: String?) {
//监听输入修改以后直接修改bean
var num = str
if (TextUtils.isEmpty(num)) {
num = "0.00"
}
var max = list?.get(pos)?.amount?.toDouble()
var min = num?.toDouble()
if (min != null) {
if (min > max!!) {
list?.get(pos)?.useNum = "0"
ToastUtils.showToast(activity, "盘点数量不能大于账存数量")
} else {
list?.get(pos)?.useNum = num
}
}
}
})
1162

被折叠的 条评论
为什么被折叠?



