when (user.user_compat) {
"A" -> holder.user_heart1.visibility = View.VISIBLE
"B" -> {
holder.user_heart4.visibility = View.GONE
}
"C" -> {
holder.user_heart3.visibility = View.GONE
holder.user_heart4.visibility = View.GONE
}
"D" -> {
holder.user_heart2.visibility = View.GONE
holder.user_heart3.visibility = View.GONE
holder.user_heart4.visibility = View.GONE
}
}
개선된 코드
// 하트 초기화
holder.user_heart1.visibility = View.GONE
holder.user_heart2.visibility = View.GONE
holder.user_heart3.visibility = View.GONE
holder.user_heart4.visibility = View.GONE
// 궁합에 따른 하트 개수 설정
when (user.user_compat) {
"A" -> {
holder.user_heart1.visibility = View.VISIBLE
holder.user_heart2.visibility = View.VISIBLE
holder.user_heart3.visibility = View.VISIBLE
holder.user_heart4.visibility = View.VISIBLE
}
"B" -> {
holder.user_heart1.visibility = View.VISIBLE
holder.user_heart2.visibility = View.VISIBLE
holder.user_heart3.visibility = View.VISIBLE
}
"C" -> {
holder.user_heart1.visibility = View.VISIBLE
holder.user_heart2.visibility = View.VISIBLE
}
"D" -> {
holder.user_heart1.visibility = View.VISIBLE
DetailActivity 페이지에서 뒤로가기를 누르면 FriendFindFragment에서 하트 개수가 유지되지 않고 각 사용자 별로 하트 개수가 1씩 줄어드는 현상이 발견되었다. UserAdapter에서 user.user_compat 값에 따라 하트의 가시성을 설정하는 로직에 문제가 있을 것이라고 추측하였다.
RecyclerView는 뷰 홀더를 재사용한다. 이전 아이템의 상태(하트의 가시성)가 다음 아이템에 잘못 적용되는 경우가 원인일 수 있다.
원래 코드에서는 특정 하트만 숨기고 다른 하트는 그대로 두는 방식을 사용했다. 이로 인해 하트의 가시성이 일관적이지 않았고, 이전 상태가 다음 아이템에 영향을 주었다.
onBindViewHolder 메서드에서 모든 하트의 가시성을 초기화한 후, user.user_compat 값에 따라 하트의 가시성을 다시 설정했다. 이렇게 하여 각 사용자의 데이터에 따라 하트가 바르게 표시되도록 보장했다.
수정된 코드에서는 먼저 모든 하트를 숨긴 후, 필요한 만큼의 하트만 보이도록 설정했다.
하트의 가시성이 이전 상태에 의존하지 않고, 각 사용자의 데이터에만 의존하도록.
DetailActivity 에서 뒤로가기를 눌렀을 때 FriendFindFragment의 하트 개수가 올바르게 유지되는것을 확인했다. 각 사용자의 user_compat 값에 따라 올바른 수의 하트가 표시되어 일관된 사용자 경험을 제공했다.
RecyclerView의 뷰 홀더 재사용에 대한 중요한 이해를 얻었으며, 관련된 UI 문제 해결에 있어 뷰의 상태 초기화의 중요성을 다시 한 번 확인할 수 있었다.