기존에는 뷰에서 아이템 선택시 상세정보가 담긴 프래그먼트로 보내줬었는데 이번에는 내가 선택한 아이템을 하이라이트 시키는 방법.
리사이클러뷰 만드는방법은 스킵하고 이미 만들어져있는 리사이클러뷰에 적용할거임.
1.아답터에 변수 추가. 내가 선택한 아이템 포지션을 저장하고 프래그먼트에서 사용할 용도..
var selectedPos = -1
2. MyViewHolder 에서 텍스트뷰와 레이아웃
val title = binding.runningPresetTitle
val layout = binding.runningPresetLayout
rv_item 레이아웃 안에 레이아웃을 하나 더 만들고 거기에 텍스트뷰를 넣었음.
이렇게 하지 않고 상위 부모 레이아웃을 하이라이트하면 리스트가 길어서 내가 아래로 스크롤할때 위에서 선택해서 하이라이드됐던 뷰가 다시 재사용되면서 아래에 내가 선택하지도 않았지만 이미 색깔이 바껴있는상태로 나타남.
3. onBindViewHolder 에서 색깔 바꿔주기.
override fun onBindViewHolder(holder: MyViewHolder, position: Int) {
if (selectedPos == position) {
holder.title.setTextColor(Color.WHITE)
holder.layout.setBackgroundColor(Color.GRAY)
}
else {
holder.title.setTextColor(Color.BLACK)
holder.layout.setBackgroundColor(Color.WHITE)
}
//레이아웃에 온클릭리스너
holder.layout.setOnClickListener {
selectedPos = position
notifyDataSetChanged()
}
}
notifyItemChanged(position) 을 사용한다면 내가 선택한 아이템을 하이라이트시킬수는 있지만 내가 기존에 선택해서 색깔이 바꼈던 아이템들을 다시 못바꿈.
같은 방법으로 길게 눌렀을때 이벤트도 설정 가능
holder.layout.setOnLongClickListener{
println("breakpoint : preset longclick. $position clicked")
//long click event here
return@setOnLongClickListener true
}
참고
[안드로이드] RecyclerView - 아이템 강조 (Highlight)
RecyclerView에서 특정 아이템을 선택했을 때, 해당 아이템만 강조하고 싶은 경우가 있습니다. [Step 1] 전역 변수로 Position 변수를 정의합니다.private int selectedPosition = -1;[Step 2] OnBindViewHolder에 아래 코
inma.tistory.com
'Android > UI' 카테고리의 다른 글
Android/ LinearLayout (1) | 2024.03.12 |
---|---|
Android / Kotlin AlertDialog custom Layout List 다이얼로그 커스텀 레이아웃 (0) | 2023.09.25 |
Android/Kotlin RecyclerView swipe 지우기. Drag로 위치 변경 (0) | 2023.09.04 |
Android/Kotlin RecyclerView - 아이템에 클릭 이벤트 (0) | 2023.08.17 |
Android/Kotlin RecyclerView (0) | 2023.08.13 |