안드로이드 - RecyclerView

2023. 3. 7. 17:44코딩일기/Android

평범한 그냥  ViewHolder 클래스.

리사이클러뷰는 뷰를 재사용하기 때문에

좋아요 표시를 했던 뷰가, 밑에 재사용되는 뷰에도 좋아요 표시가 눌려있는 오류를 경험했다.

이후에 코드를 고쳐서 문제 해결!

@Override
public void onBindViewHolder(@NonNull VH holder, int position) {
    ToiletItem toiletItem = items.get(position);
    Glide.with(context).load(toiletItem.photo).into(holder.ivImg);
    holder.tvName.setText(toiletItem.toiletNm);
    holder.tvAddr.setText(toiletItem.rnAdres);
    
    // 다시 뷰가 올라올때 좋아요 버튼 설정.
    if (toiletItem.like) {
        holder.ivFavorite.setImageResource(R.drawable.baseline_favorite_24);
    } else {
        holder.ivFavorite.setImageResource(R.drawable.baseline_favorite_border_24);
    }
    
    // 클릭 리스너
    holder.ivFavorite.setOnClickListener(v -> {
        if (toiletItem.like) {
            // 좋아요 해제
            holder.ivFavorite.setImageResource(R.drawable.baseline_favorite_border_24);
            toiletItem.like = !toiletItem.like;
        } else {
            // 좋아요 설정
            holder.ivFavorite.setImageResource(R.drawable.baseline_favorite_24);
            toiletItem.like = !toiletItem.like;
        }
    });
}
 

 

반응형