在RecyclerView的子布局中使用EditText在数据滚动后消失
2019独角兽企业重金招聘Python工程师标准>>>
同事在新的项目中遇到在RecyclerView的子布局中使用EditText,在第一项输入数据滚动出可视界面后,再次回到第一项后,输入的数据没有了。我想应该是RecyclerView回收了,而数据没有显示在界面上,我看过同事的代码后,就添加了如下代码:
String leaveMessage = bean.getMessage();
if (!TextUtils.isEmpty(leaveMessage)) {holder.et_liuyan.setText(leaveMessage);
}
holder.et_liuyan.addTextChangedListener(new TextWatcher() {@Overridepublic void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {}@Overridepublic void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {}@Overridepublic void afterTextChanged(Editable editable) {confirmlist.get(position).setMessage(editable.toString());}
});
但是经过测试还是不行,就在百度和Stack OverFlow上搜索,发现还是有同样的问题, 参考链接地址:在RecyclerView中使用EditText滚动后数据消失,RecyclerView 多布局,Item中使用EditText刷新问题扫坑,Android RecyclerView's EditText swaps its position after entering data and scroll down
根本原因是因为 EditText 的重新绘制!当重绘之后该回调函数没有获取到填充的数据,从而导致了数值都被置为 0 了。
这三个解决方法都是:在每次填充数据之前先移除 TextWatcher 监听器,然后为 EditText 填充数据 ,最后在为 EditText 添加 TextWatcher 监听器,代码如下所示:
if (holder.et_liuyan.getTag() instanceof TextWatcher) {holder.et_liuyan.removeTextChangedListener((TextWatcher)holder.et_liuyan.getTag() );
}
TextWatcher watcher = new TextWatcher() {@Overridepublic void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {}@Overridepublic void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {}@Overridepublic void afterTextChanged(Editable editable) {confirmlist.get(position).setMessage(editable.toString());}
};
holder.et_liuyan.addTextChangedListener(watcher);
holder.et_liuyan.setTag(watcher);
至此,问题得到解决,记录下来,以备查阅!
转载于:https://my.oschina.net/deepSprings/blog/994148
在RecyclerView的子布局中使用EditText在数据滚动后消失相关推荐
- jquery中ajax请求后台数据成功后既不执行success也不执行error解决方法
jquery中ajax请求后台数据成功后既不执行success也不执行error解决方法 参考文章: (1)jquery中ajax请求后台数据成功后既不执行success也不执行error解决方法 ( ...
- ajax 请求成功 再执行javascript,jquery中ajax请求后台数据成功后既不执行success也不执行error的完美解决方法...
jquery中ajax请求后台数据成功后既不执行success也不执行error,此外系统报错:Uncaught SyntaxError: Unexpected identifier at Objec ...
- 调用$.ajax不成功,jquery中ajax请求后台数据成功后既不执行success也不执行error的完美解决方法...
jquery中ajax请求后台数据成功后既不执行success也不执行error,此外系统报错:Uncaught SyntaxError: Unexpected identifier at Objec ...
- 第二十篇 分享在VUE中使用data-view实现数据滚动显示并可点击
前言:在大屏项目中需要滚动展示某个列表信息,并且能够 悬浮鼠标停止滚动.可点击最后一列查看详情.鼠标移走后又正常的滚动和动态能更新新数据. 效果图: 使用方法也很简单,下面直接看下用法吧~~~ 1. ...
- recyclerview 软键盘_RecyclerView中解决EditText的各种异常 终极无BUG版
一 引言 之前发布过一个RecyclerView中解决EditText各类异常的方案,但是经过最新的各种恶心操作的测试,发现依然没有完全消灭所有的异常,所以在工作之余,又翻出来捣鼓一下. 依然感谢:苏 ...
- android listview edittext 不能输入,android – 无法在expandable listview中输入edittext
我正在使用包含2个不同子项的可扩展ListView.子布局包含3个EditText字段.当我展开组时,它会显示子布局,但我无法在edittext字段中键入任何文本. 我在自定义可扩展列表适配器中的代码 ...
- android自定义alertdialog不现实输入法,自定义的dialog中的EditText无法弹出输入法解决方案...
1.解决无法弹出输入法: 在show()方法调用之前,用dialog.setView(new EditText(context))添加一个空的EditText,由于是自定义的AlertDialog,有 ...
- php页面底部信息居中,css底部如何局中?css三种居中方法
本篇文章给大家带来的内容是关于css底部如何局中?css三种居中方法,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 某天组长让我改一个表格的样式,要求底部局中.当时想很简单的嘛,哼哧 ...
- 点击编辑框全选内容java_Android 中使用EditText 点击全选再次点击取消全选功能
最近在开发浏览器碰到这么一个需求:点击地址栏的时候,需要全选并调出键盘,再次点击就取消全选显示光标.点击屏幕除地址栏其他位置时,键盘隐藏,隐藏光标. 大部分浏览器都是这样的逻辑,这样可以提高用户体验, ...
最新文章
- Linux C编程中的段错误
- CNCF宣布containerd毕业
- 使用Memcache缓存mysql数据库操作的原理和缓存过程浅析
- Python 动态添加类方法
- node --- 使用node连接mysql
- 根据 sitemap 的规则[0],当前页面 [pages/index/index] 将被索引 提示
- 基于JAVA+Swing+MYSQL的酒店管理系统
- linux的vim编辑器,强大的Vim 编辑器
- 我转行程序员的那一年(二)
- 基于Python的直方图匹配
- ios 网速监控_iOS怎么实时显示当前的网速
- 龙蜥开发者说:我眼里的龙蜥社区:一个包容的大家庭 | 第 10 期
- gitlab mysql 配置_Gitlab安装配置及使用
- sipp脚本撰写(二)
- Linux系统Word转换PDF,文档字体乱码不显示问题解决
- bC技术绑定10讲②解读“bC双码关联”!
- sqlmap注入——POST检测点方法
- 股权控制权的五种设计策略
- BetaFlight统一硬件配置文件研读之set命令
- 拉普拉斯变换的物理意义是什么?