出错原因
在适配器onBindViewHolder(….)方法里调用了notifyItemChanged(position),导致RecyclerView还没有渲染完滑动引发的
错误代码
@Override
public void onBindViewHolder(final ContentViewHolder holder, final int position) {
.....
holder.et_Number.setOnFocusChangeListener(new View.OnFocusChangeListener() {
@Override
public void onFocusChange(View view, boolean b) {
//TODO 问题就是我通过Log打印日志发现这个onBindViewHolder()加载数据时会一直渲染,导致notifyItemChanged(position)一直在循环,就会导致滑动时还没渲染完就调用这方法了
if(!b){
//焦点失去时刷新
notifyItemChanged(position);
}
}}
......
}
我的解决方法
int myPosition = -1;
@Override
public void onBindViewHolder(final ContentViewHolder holder, final int position) {
.....
holder.et_Number.setOnFocusChangeListener(new View.OnFocusChangeListener() {
@Override
public void onFocusChange(View view, boolean b) {
// TODO 在外面定义个变量myPosition ,当myPosition 不等于position就执行notifyItemChanged(position),这样的话每次就只执行一次了,再运行项目滑动失去焦点刷新就OK了
if(!b){
//焦点失去时刷新
if(myPosition == position)
return;
myPosition = position
notifyItemChanged(position);
}
}}
......
}