2017-05-18 33 views
0

我有一个RecyclerView物品,所有物品都有checkbox。重点是你只能设置一个checkboxchecked(喜欢的东西)。一切正常,直到有足够的项目需要滚动RecyclerView。但是,当有足够的物品滚动时,该物品的一些名称将消失,除了一个物品外,其他任何物品都不会工作,并且全部卡住。另外,我得到下面的异常:带复选框的Recyclerview物品变形

"Cannot call this method while RecyclerView is computing a layout or scrolling"

这是我在做什么:

holder.getBinder().cbIsFavourite.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { 
     @Override 
     public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 
      if (mListener == null) { 
       return; 
      } 

      if (isChecked) { 
       for (Peem peemTmp : mPeemList) { 
        if (peemTmp.isFavourite()) { 
         peemTmp.setFavourite(false); 
        } 
       } 
       peem.setFavourite(true); 
       PeemAdapter.this.notifyDataSetChanged(); 
      } else { 
       peem.setFavourite(false); 
       removeFavouriteShops(peem); 
      } 

      mListener.onFavouriteChecked(peem); 
     } 
    }); 

在此行中出现的错误PeemAdapter.this.notifyDataSetChanged(); 如果我删除了这一行是不是一切正常,但可以选择多个checkboxes这不是主意。

回答

0

为什么不使用RadioButton和RadioGroup?

否则尝试在帖子Runnable中调用notifyDataSetChanged(),它将在布局计算后调用。事情是这样的:

myView.post(new Runnable() { 
     @Override 
     public void run() { 
      notifyDataSetChanged(); 
     } 
    }); 

编辑:

holder.getBinder().cbIsFavourite.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { 
     @Override 
     public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 
      if (mListener == null) { 
       return; 
      } 

      if (isChecked) { 
       for (Peem peemTmp : mPeemList) { 
        if (peemTmp.isFavourite()) { 
         peemTmp.setFavourite(false); 
        } 
       } 
       peem.setFavourite(true); 
       holder.getBinder().cbIsFavourite.post(new Runnable() { 
       @Override 
       public void run() { 
        PeemAdapter.this.notifyDataSetChanged(); 
        } 
       }); 

      } else { 
       peem.setFavourite(false); 
       removeFavouriteShops(peem); 
      } 

      mListener.onFavouriteChecked(peem); 
     } 
    }); 
+0

有人做过这样,所以我现在还不能执行单选按钮。但是我怎么可以在我的情况下使用你的例子? – Esteban

+0

我编辑答案...希望它会工作/帮助 –

+0

不,它不工作。最后3个底部项目开始闪烁,没有任何可点击的内容。我尝试使用'notifyItemRangeChanged(0,mPeemList.size());'它可以工作,但有时第一个项目有问题... – Esteban

相关问题