RecyclerView.Adapter的某个item中EditText的输入后所有列表中Editetext全部被修改的问题
来源:互联网 发布:淘宝财富值在哪看 编辑:程序博客网 时间:2024/06/06 12:31
最近在做项目遇到类似天猫中同一个订单中的多个商品评价问题,
其中涉及到EditText输入问题,其中一个Edittext输入改变之后,
其他item中的Edittext也跟着改变的bug,尝试了很多方法都没有解决。
网上查看了一篇类似的文章但是不能解决我的问题:
http://blog.csdn.net/shadowliucs/article/details/51329687
问题待解决
、、、、、、、、、、、、、、今天调试找到方法了、、、、、、、、、、、、、、、、
按照上面的文章是没有错的,只是我在回调给Activity的时候,
传的position传错了,用getTag()获取输入的第几个position,
导致会去修改其他item中Edittext的值
代码如下:
1.RecylistView方法onBindViewHolder中,原则就是setText前设置true;setText后设置false;
setText进入的时候会进入addTextChangedListener中的afterTextChanged方法,
保证只执行一次afterTextChanged里面的内容,重复执行就跳出if (!ischange) 判断,
直到下一次重新输入
ischange =true;
if (datas.get(position).getEvaluateStringLength()==null) {
((MyViewHolder)holder).tv_evaluate.setText("");
((MyViewHolder) holder).tv_evaluate_tips.setText("0/120");
}else{
((MyViewHolder)holder).tv_evaluate.setText(datas.get(position)
.getCommentContent());
((MyViewHolder)holder).tv_evaluate.setSelection(datas.get(position)
.getCommentContent().length());
((MyViewHolder) holder).tv_evaluate_tips.setText(datas.get(position)
.getEvaluateStringLength()+"/120");
}
ischange =false;
((MyViewHolder)holder).tv_evaluate.addTextChangedListener(new MyTextWatcher(((MyViewHolder)holder),position));
2.MyViewHolder方法,本来想在adapter内更新的,但是考虑到输入完成要
和图片一起上传, 就用回调传到主Activity中去拼接参数一起上传评论了。
还有就是要单独更新某个item,
全部更新的话会默认第一个获取第一个焦点。
class MyTextWatcher implements TextWatcher{
private CharSequence temp;
private boolean isEdit = true;
private int selectionStart ;
private int selectionEnd ;
private MyViewHolder holder;
int position;
public MyTextWatcher(MyViewHolder holder,int position){
this.holder=holder;
this.position=position;
}
@Override
public void beforeTextChanged(CharSequence s, int arg1, int arg2,
int arg3) {
temp = s;
}
@Override
public void onTextChanged(CharSequence s, int arg1, int arg2,
int arg3) {
}
@Override
public void afterTextChanged(Editable s) {
if (!ischange) {
// holder.tv_evaluate.removeTextChangedListener(this);
selectionStart = ((MyViewHolder) holder).tv_evaluate
.getSelectionStart();
selectionEnd = ((MyViewHolder) holder).tv_evaluate
.getSelectionEnd();
// Log.i("gongbiao1",""+selectionStart);
if (temp.length() > 120) {
s.delete(selectionStart - 1, selectionEnd);
int tempSelection = selectionStart;
// tv_evaluate.setText(s);
// specialUpdate("120");
// datas.get(position).setEvaluateStringLength("120");
} else {
// datas.get(position).setEvaluateStringLength(String.valueOf
(s.toString().length()));
}
// ((MyViewHolder)holder).tv_evaluate.extendSelection(s.length());
// evaluateNum.EvaluateNum(s.toString().trim(),position);
if (s.toString().trim().equals("")) {
// return;
}
if (temp.length() > 120) {
// datas.get(position).setEvaluateStringLength("120");
} else {
// datas.get(position).setEvaluateStringLength(String.valueOf
(s.toString().length()));
}
// datas.get(position).setCommentContent(s.toString());
int indexposition=(Integer)((MyViewHolder)holder)
.itemView.getTag();
evaluateNum.EvaluateNum(s.toString(),indexposition );
// notifyItemChanged(position);
// holder.tv_evaluate.addTextChangedListener(this);
// return;
// specialUpdate(s.toString().trim(),position);
// holder.tv_evaluate.addTextChangedListener(this);
}
}
}
3.主Activity实现回调:
@Override
public void EvaluateNum(final String number, final int position) {
if (evaluateBeans==null)
return;
if (number.equals("")){
return;
}
// evaluateAdapter.upData(position);
// rv_evaluate_product.setAdapter(evaluateAdapter);
evaluateBeans.get(position).setCommentContent(number);
evaluateBeans.get(position).setEvaluateStringLength(
String.valueOf(number.trim().length()));
evaluateAdapter.notifyItemChanged(position);
// evaluateAdapter.upData(position);
}
- RecyclerView.Adapter的某个item中EditText的输入后所有列表中Editetext全部被修改的问题
- RecyclerView中item的EditText的监听
- ListView:在Adapter中修改item里的某个图形的大小、填充颜色、边距
- ListView中item点击事件和item中radiobutton的点击editText输入焦点问题
- Recyclerview item中有EditText使用刷新遇到的坑!!!!!
- RecyclerView 中adapter.notifyDataSetChanged()无效的问题
- RecyclerView中item无法充满的问题
- 解决RecyclerView中item包括EditText,RadioGroup复用的问题
- RecyclerView中放入EditText出现的问题
- Android RecyclerView 中多Item的EditText监听 和 EditText焦点混乱的解决方法
- Android开发随笔 1:修改Adapter某个Item的值
- recyclerview 的item被remove后position的错乱问题
- Android开发中动态获取RecyclerView的Item中EditText的内容
- Android中Scrollview嵌套recyclerView,recyclerview设置wrapcontent无法显示以及显示后item显示不全的问题
- 在adapter中对item的某个控件点击,并在点击事件中对其他item控件进行设置
- 在RecyclerView的子布局中使用EditText,在第一项输入数据滚动出可视界面后,再次回到第一项后,输入的数据没有了
- Android-------ListView列表中获取EditText输入的值
- 水平RecyclerView中Item中含有EditText问题
- centos7 部署新服务器一
- 使用HTML语言和CSS开发商业站点_浮动
- GitChat · 移动开发 | 征服React Native—列表组件
- POJ3349总结(第一次用hash解决问题)
- JS获取各类窗口大小
- RecyclerView.Adapter的某个item中EditText的输入后所有列表中Editetext全部被修改的问题
- 数据离散化
- LeetCode 98. Validate Binary Search Tree
- Docker安装(三)
- SQL Server2000在只有主库mdf文件下的恢复
- 我对不起党,对不起国家,对不起人民HDU6201 补题(disj)
- Ubuntu14.04 下 OpenCV3 安装
- 呵呵,作为一个胖子做不到的事情,作为一个产妇能做到
- SQL GUID和自增列做主键的优缺点