今天在写RecyclerView时item里边含有一个EditText,然后在动态添加item的时候之前已经编辑过的item中的EditText中的内容各种问题(跳动,改变之类的,总之就是很难受)!
总结:因为在bind数据的时候每次都addTextChangedListener导致的,然后在notifyDataSetChanged的时候就是会多次重复走TextWatcher的回调,从而导致数据变动、跳动的问题,自己想了好久没解决最终还是度了下,解决方案也很简单(度完之后的感觉,当时自己咋就想不到呢!!!惭愧~~~),在bind中给EditText添加setOnFocusChangeListener,当item的EditText获取到焦点的时候addTextChangedListener,当失去焦点的时候removeTextChangedListener。
代码如下:
final GuanJianCiZuETWatcher watcher = new GuanJianCiZuETWatcher(i);
etGuanJianCiZu.setOnFocusChangeListener(new View.OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
EditText mV = (EditText) v;
if (hasFocus) {
mV.addTextChangedListener(watcher);
} else {
mV.removeTextChangedListener(watcher);
}
}
});
网友评论