2017-05-18 11 views
0

私はRecyclerViewに項目があり、そのすべてにcheckboxがあります。ポイントは、checkboxchecked(お気に入りのようなもの)としか設定できないということです。 RecyclerViewをスクロールするのに十分な項目があるまでは、すべて正常に機能します。しかし、スクロールするのに十分なアイテムがあると、アイテムの名前の一部が消えて、checkboxesのどれもが1つを除いて動作せず、すべてが固まってしまいます。これは私がやっているものですチェックボックスが付いた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(); 
     } 
    }); 

EDITED:

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

関連する問題