出错原因
在适配器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);
}
}}
......
}
本文介绍了一种在使用RecyclerView时避免滑动冲突的方法。详细解释了由于在onBindViewHolder中频繁调用notifyItemChanged导致的问题,并提供了一个具体的解决案例。
1111

被折叠的 条评论
为什么被折叠?



