Android Kotlin Recyclerview - 리스트 항목 클릭 시 스타일 변경

Notepad96

·

2022. 1. 13. 09:49

300x250

 

 


1. 결 과

결 과

# 이 글은 리스트(리사이클러뷰)의 항목을 클릭 및 선택 했을 시 스타일을 변경하는 방법을 기술한다.

 

# 항목을 선택하면 배경색을 변경하며 다른 항목을 클릭하면 기존 항목의 배경색은 원래대로 돌아오며 새로운 항목의 배경색을 변경한다.

 

 

 

 


2. ListAdapter.kt (RecyclerView Adapter)

package com.example.recyclerviewitemselect

import android.graphics.Color
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.recyclerview.widget.RecyclerView
import kotlinx.android.synthetic.main.list_item.view.*

class ListAdapter: RecyclerView.Adapter<ListAdapter.ListView>() {
    var selectPos = -1

    inner class ListView(val layout: View): RecyclerView.ViewHolder(layout)

    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ListView {
        return ListView(LayoutInflater.from(parent.context).inflate(R.layout.list_item, parent, false))
    }

    override fun onBindViewHolder(holder: ListView, position: Int) {
        if(selectPos == position) {
            holder.layout.list_item_layout.setBackgroundColor(Color.parseColor("#aaaaaa"))
        } else {
            holder.layout.list_item_layout.setBackgroundColor(Color.WHITE)
        }


        holder.layout.list_item_layout.setOnClickListener {
            var beforePos = selectPos
            selectPos = position

            notifyItemChanged(beforePos)
            notifyItemChanged(selectPos)
        }
    }

    override fun getItemCount(): Int {
        return 20
    }
}

 

# 현재 선택된 pos를 저장할 selectPos 선언하여 현재 position과 일치할 경우 배경을 바꾸고 그 외의는 기본값을 갖도록 만든다.

 

 

# 리스트의 항목을 클릭하였을 시 selectPos를 beforePos의 저장한 후 현재 position으로 바꾸어준다.

 

이후 notifyItemChanged의 이전 pos와 현재 pos를 줌으로써 해당 항목들의 레이아웃을 다시 생성하게됨으로서 스타일이 업데이트 된다.

 

 

 


3. 전체 코드

 

 

GitHub - Notepad96/BlogExample

Contribute to Notepad96/BlogExample development by creating an account on GitHub.

github.com

 

300x250