您的位置:首页 > 编程语言 > Java开发

使用RecyclerView中引发 java.lang.IllegalStateException: Cannot call this method while RecyclerView is com

2017-05-18 17:23 597 查看


出错原因

在适配器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);
}
}}
......
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐