今天记录下关于RecyclerView中item中EditText使用的问题
当我们在item中使用监听的时候经常会遇到些问题,比如数据在EditText中输入后滚动发现,复用item中数据错乱,经常我们会用添加监听来保存数据,这样在刷新时候就遇到了问题。如果不将监听移除在为EditText设置内容时就会响应监听中的执行代码。影响数据显示。
下面是我在做这样的需求时,由于是要对每次有输入要实时监听,我用了onTextChanged,如果不需要,使用afterTextChanged就可以。这里主要是讲EditText设置内容时会响应监听。就需要在设置内容之前移除监听,然后设置内容,在添加监听。
onBindViewHolder中做如下操作
if(holder.et_num.getTag() instanceof TextWatcher){
holder.et_num.removeTextChangedListener((TextWatcher)holder.et_num.getTag());
}
if(StringUtils.isEmpty(moneyUsingDetailItem.getNum())){
holder.et_num.setText("");
}else{
holder.et_num.setText(moneyUsingDetailItem.getNum());
}
TextWatcher numWatcher = new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
}
@Override
public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
//内容操作
}
@Override
public void afterTextChanged(Editable editable) {
}
};
holder.et_num.addTextChangedListener(numWatcher);
holder.et_num.setTag(numWatcher);
如有想法欢迎交流