RecyclerView.Adapter的某个item中EditText的输入后所有列表中Editetext全部被修改的问题


最近在做项目遇到类似天猫中同一个订单中的多个商品评价问题,

其中涉及到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);
}




















  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值