2017-05-18 7 views
0

나는 RecyclerView에 항목이 있으며 그 중 모두는 checkbox입니다. 요점은 checkboxchecked (좋아하는 것)으로 설정할 수 있다는 것입니다. RecyclerView 스크롤해야하는 항목이 충분할 때까지 모든 것이 올바르게 작동합니다. 그러나 스크롤 할 항목이 충분하면 항목 이름 중 일부가 사라지고 checkboxes 중 하나도 작동하지 않으며 모두 멈추었습니다.확인란이있는 Recyclerview 항목이 왜곡됩니다.

오류가이 라인에서 발생
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(); 나는, 모든 괜찮 그 라인을 제거하는 경우 만 :

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

이것은 내가 뭐하는 거지 있습니다 : 또한, 나는 다음과 같은 예외가 아이디어가 아닌 복수 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