解决 recycleview为editText添加afterTextChanged监听刷新数据错乱

发布时间:2025-05-16 02:51

区块链为数据安全带来了新的解决方案 #生活知识# #生活感悟# #科技生活变迁# #数字化生活体验#

最新推荐文章于 2021-12-16 14:24:16 发布

keli_Jun 于 2019-12-21 14:33:57 发布

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

原因:recycleview的复用机制

方法一:强制停用Recyclerview的复用

holder.setIsRecyclable(false);//防止editText数据错乱

方法二:在onBindViewHolder()中判断EditText是否获取了焦点,只有在获取焦点了在进行内容的改变。

if (addItemTextChanged != null) {

TextWatcher textWatcher = new TextWatcher() {

@Override

public void beforeTextChanged(CharSequence s, int start, int count, int after) {

}

@Override

public void onTextChanged(CharSequence s, int start, int before, int count) {

}

@Override

public void afterTextChanged(Editable s) {

if(holder.itemStockOrderInQty.hasFocus()){

addItemTextChanged.afterTextChanged(s.toString(), position);

}

}

};

holder.itemStockOrderInQty.setOnFocusChangeListener(new View.OnFocusChangeListener() {

@Override

public void onFocusChange(View v, boolean hasFocus) {

if(hasFocus){

holder.itemStockOrderInQty.addTextChangedListener(textWatcher);

}else {

holder.itemStockOrderInQty.removeTextChangedListener(textWatcher);

}

}

});

}

最好是在item布局中EditText的父级控件中找一个,设置成

android:focusable="true"

android:focusableInTouchMode="true"          确保在开始的时候EditText就不获取焦点。

方法三:通过view的setTag()方法解决Recyclerview的复用

holder.itemStockOrderInQty.setTag(position);

holder.itemStockOrderInQty.clearFocus();

TextWatcher textWatcher = new TextWatcher() {

@Override

public void beforeTextChanged(CharSequence s, int start, int count, int after) {

}

@Override

public void onTextChanged(CharSequence s, int start, int before, int count) {

}

@Override

public void afterTextChanged(Editable s) {

if (addItemTextChanged != null) {

addItemTextChanged.afterTextChanged(s.toString(), (int)

holder.itemStockOrderInQty.getTag());

}

}

};

holder.itemStockOrderInQty.addTextChangedListener(textWatcher);

holder.itemStockOrderInQty.setText(String.valueOf(mStockOrderInList.get((int)holder.itemStockOrderInQty.getTag()).getQty()));

第一种方法加载大量数据时比较慢,比较都禁用了复用机制,第二种跟第三种就不会,大神们建议是用第三种哦

网址:解决 recycleview为editText添加afterTextChanged监听刷新数据错乱 https://www.yuejiaxmz.com/news/view/976981

相关内容

mysql导入数据库时出现40101错误解决方法
华为新一代智能数据中心解决方案:高效节能不容错过
智能健康监测设备数据采集系统解决方案
刷新为你!立邦科技赋能生活“为家添色”
“大数据+”为美好生活“赋能添彩”
“大数据+”为美好生活“赋能添彩”
电力设备节能数据采集远程监控系统解决方案
数据库压力测试详解
Android中布局的巧妙设计
Android Studio 实现天气预报App (简单方便展示内容超多)

随便看看