RecyclerView.Adapter的某个item中EditText的输入后所有列表中Editetext全部被修改的问题
2017-09-11 18:42
871 查看
最近在做项目遇到类似天猫中同一个订单中的多个商品评价问题,
其中涉及到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中Item中含有EditText问题
- RecyclerView的item中有EditText的问题
- 详解Recyclerview item中有EditText使用刷新遇到的坑
- 当EditText做Recyclerview头部时,界面绘制好后发现Recyclerview向上滚动了一点的问题
- 关于listview或者recyclerview里面的edittext数据保存问题
- 在RecyclerView中有多个edittext防止条目过多时滑动recyclerview后edittext内输入内容混乱BUG解决
- listview或recyclerView嵌套edittext出现复用问题的解决方式
- RecyclerView之crash 和 EditText数据重置问题
- 通过实现TextWatcher接口来获取RecyclerView item的EditText的值
- 关于android开发ListView的Adapter的convertView中有EditText的问题
- RecyclerView嵌套多个布局,多个editText,解决文本输入框上下交换位置中的值问题
- Recyclerview item中有EditText使用刷新遇到的坑!!!!!
- 基础向:recyclerView 内嵌 edittext checkbox 焦点获取、数据紊乱以及数据保存问题
- EditTextView跟Adapter使用聚焦问题
- RecyclerView.Adapter关于notifyItemInserted等数据错位问题
- RecyclerView + EditText item 复用造成数据混乱
- Android 利用RecyclerView.Adapter刷新列表中的单个view问题
- RecyclerView中放入EditText出现的问题
- RecyclerView Adapter 优雅封装搞定所有列表
- RecyclerView Adapter 优雅封装,一个Adapter搞定所有列表