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

来源:互联网 发布:ps4数据库损坏 编辑:程序博客网 时间:2024/05/16 06:28

报错内容

出错原因

在适配器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);                }}}    ......    }
阅读全文
1 0
原创粉丝点击