解决RecycleView 中Item包含Edittext时,滑动view复用导致数据错乱的问题
程序员文章站
2022-03-06 15:58:57
解决RecycleView 中Item包含Edittext时,滑动导致数据错乱的问题一言不合就上代码:override fun onBindViewHolder(p0: InnerHolder, position: Int) { var item :AppOnShelfDetail = mStringSparseArray[position] p0.tv_content_code.text = item.itemCode //商品编码 p0.tv_r...
解决RecycleView 中Item包含Edittext时,滑动导致数据错乱的问题
一言不合就上代码:
override fun onBindViewHolder(p0: InnerHolder, position: Int) {
var item :AppOnShelfDetail = mStringSparseArray[position]
p0.tv_content_code.text = item.itemCode //商品编码
p0.tv_ready_up_number.text = StringUtil.intToString(item.reqQty)
if (p0.editText.tag is TextWatcher) {
p0.editText.removeTextChangedListener(p0.editText.tag as TextWatcher?)
}
if (p0.editTextCode.tag is TextWatcher) {
p0.editTextCode.removeTextChangedListener(p0.editTextCode.tag as TextWatcher?)
}
val editWatcher = EditWatcher(position, item,p0)
val editWatcherCode = EditWatcherCode(position,item, p0)
p0.editText.addTextChangedListener(editWatcher)
p0.editTextCode.addTextChangedListener(editWatcherCode)
p0.editText.tag = editWatcher
p0.editTextCode.tag = editWatcher
if (mStringSparseArray[position].onshelfQty == 0) p0.editText.setText("")
else p0.editText.setText(StringUtil.intToString(mStringSparseArray[position].onshelfQty))//实际上架数量
p0.editTextCode.setText(mStringSparseArray[position].locationCode)//上架库位
}
inner class EditWatcher(val position: Int,var item :AppOnShelfDetail, val hoilder: GoodsUpDetailAdapter.InnerHolder) : TextWatcher {
override fun beforeTextChanged(p0: CharSequence?, p1: Int, p2: Int, p3: Int) {
}
override fun afterTextChanged(content: Editable?) {
if (!content.isNullOrEmpty()) {
val readyUpCount: Int = hoilder.tv_ready_up_number.text.toString().toInt()
val signCount: Int = content.toString().toInt()//实上架数量
if (signCount <= readyUpCount) {
item.onshelfQty = signCount
}else{
ToastUtils.show("实上架数量大于待上架数量,请重新输入")
}
mStringSparseArray.put(position, item)
}
}
override fun onTextChanged(p0: CharSequence?, p1: Int, p2: Int, p3: Int) {
}
}
inner class EditWatcherCode(val position: Int,var item :AppOnShelfDetail, val hoilder: GoodsUpDetailAdapter.InnerHolder) : TextWatcher {
override fun beforeTextChanged(p0: CharSequence?, p1: Int, p2: Int, p3: Int) {
}
override fun afterTextChanged(content: Editable?) {
if (!content.isNullOrEmpty()) {
var locationCode: String = content.toString()//唯一码
item.locationCode = locationCode
mStringSparseArray.put(position, item)
}
// else {
// mStringSparseArray.delete(position)
// }
}
override fun onTextChanged(p0: CharSequence?, p1: Int, p2: Int, p3: Int) {
}
}
核心代码就这么多,接下来再加上 局部刷新,就可以解决滑动复用导致的数据错乱问题
fun setData(stringSparseArray: SparseArray<Object>, count: Int,index:Int) {
mStringSparseArray = stringSparseArray
mCount = count
// notifyDataSetChanged()
notifyItemChanged(index)
}
本文地址:https://blog.csdn.net/u013075460/article/details/107635170
下一篇: 浅析HTML5 Landmark