adapter中:
1 private List<Integer> checkboxUserIdList = new ArrayList<>();
在如下這個方法中:
1 public void onBindViewHolder(final RecyclerView.ViewHolder holder, final int position)
將item 的 root layout 設置tag為當前的position:
// 設置item背景顏色的view,將其setTag itemViewHolder.rl_item.setTag(position);
判斷的時候,就可以獲取root layout的tag值,將其進行判斷,設置item當前狀態。
1 if(checkboxUserIdList.contains(itemViewHolder.rl_item.getTag())) { 2 itemViewHolder.rl_item.setEnabled(false); 3 itemViewHolder.check_box.setEnabled(true); 4 itemViewHolder.rl_item.setBackgroundResource(R.color.gray_bg); 5 } else { 6 itemViewHolder.rl_item.setEnabled(true); 7 itemViewHolder.check_box.setEnabled(false); 8 itemViewHolder.rl_item.setBackgroundResource(R.color.white); 9 }
其中是因為ViewHolder復用,導致的狀態的錯亂,所以想要解決這個item的狀態問題:
1、viewholder就不進行復用,也不存在checkbox 混亂選中的問題了,但是 你滑動的時候卡的要死:
1 viewHolder.setIsRecyclable(false);
2、在獲取到的bean中設置一個標志位,但是需要修改bean 。雖然只是加個字段的問題,但是不建議。
3、也就是上面寫出來的代碼。
參考:其實跟listview 復用一樣。