상세 컨텐츠

본문 제목

[안드로이드 코틀린] RecyclerView 다중 선택 색상 변경하는 방법

안드로이드

by aries574 2022. 9. 22. 19:30

본문


이번 시간에는 RecyclerView로 만든 리스트의 아이템 다중 선택하는 방법을 알아보겠습니다. 


목차

1. 실행 화면
2. 아이템 클래스 Item.kt
3. 아이템 화면 list_item.xml
4. 아이템 어댑터 ItemAdapter.kt
5. 메인 화면 activity_main.xml
6. 메인 코드 MainActivity.kt


1. 실행 화면

 

RecyclerView 다중 선택

 

2. 아이템 클래스 Item.kt

- 설명 -

 1.  데이터 담는 클래스

data class Item(
    var name: String,
    var selected: Boolean
)

 


3. 아이템 화면 list_item.xml

- 설명 -

 1. 데이터를 보여줄 화면

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/layout"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_margin="10dp"
    android:orientation="vertical">

    <TextView
        android:id="@+id/itemText"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:textSize="25sp"
        android:textStyle="bold" />
</LinearLayout>

 


4. 아이템 어댑터 ItemAdapter.kt

- 설명 -

 1. private lateinit var itemList: ArrayList<Item>

   데이터 담을 리스트

 2. onCreateViewHolder

   화면 설정 함수

 3. onBindViewHolder

   데이터 설정 함수

 4. setMultipleSelection

   선택 행 값 변경해주는 함수

class ItemAdapter(): RecyclerView.Adapter<ItemAdapter.ItemViewHolder>(){

    private lateinit var itemList: ArrayList<Item>

    // 생성자
    constructor(itemList: ArrayList<Item>): this(){

        this.itemList = itemList
    }

    /**
     * 화면 설정
     */
    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder {
        val inflater = LayoutInflater.from(parent.context)
        val view: View = inflater.inflate(R.layout.list_item, parent, false)

        return ItemViewHolder(view)
    }

    /**
     * 데이터 설정
     */
    override fun onBindViewHolder(holder: ItemViewHolder, position: Int) {

        //아이템 담기
        val item: Item = itemList[position]

        //화면에 데이터 보여주기
        holder.itemText.text = item.name

        //클릭 이벤트
        holder.layout.setOnClickListener {
            //멀티 선택 함수
            setMultipleSelection(position)
        }

        //선택값에 따른 배경색 설정
        if(item.selected){
            holder.itemView.setBackgroundColor(Color.parseColor("#90CAF9"))
        }else{
            holder.itemView.setBackgroundColor(Color.parseColor("#EF9A9A"))
        }
    }

    /**
     * 아이템 갯수
     */
    override fun getItemCount(): Int = itemList.size

    /**
     * 멀티 선택
     */
    private fun setMultipleSelection(position: Int){

        //반대의 값을 넣는다.
        itemList[position].selected = !itemList[position].selected

        // 데이터 적용
        notifyItemChanged(position)
    }

    class ItemViewHolder(itemView: View): RecyclerView.ViewHolder(itemView){
        val layout: LinearLayout = itemView.findViewById(R.id.layout)
        val itemText: TextView = itemView.findViewById(R.id.itemText)
    }

}

 

5. 메인 화면 activity_main.xml

- 설명 -

 1. 리스트 보여줄 RecyclerView

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".MainActivity">


    <androidx.recyclerview.widget.RecyclerView
        android:id="@+id/recyclerView"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>
</LinearLayout>


6. 메인 코드 MainActivity.kt

- 설명 -

 1. getData()

   리스트에 담을 데이터 생성

 2. itemList.add(Item("$index 번째 아이템", false))

   데이터 생성해서 리스트에 담기

 3. val adapter = ItemAdapter(getData())

   데이터 담은 리스트 어댑터 생성자에 넘겨준다.

class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        //초기화
        val recyclerView: RecyclerView = findViewById(R.id.recyclerView)
        val adapter = ItemAdapter(getData())

        //recycelrView 설정
        recyclerView.layoutManager = LinearLayoutManager(this)
        recyclerView.adapter = adapter
    }

    /**
     * 데이터 생성
     */
    private fun getData(): ArrayList<Item>{

        val itemList: ArrayList<Item> = ArrayList()

        for(index in 1..10){

            itemList.add(Item("$index 번째 아이템", false))
        }
        return itemList
    }
}

2022.09.21 - [안드로이드] - [안드로이드 코트린] SharedPreferences 간단한 데이터 저장하는 방법

 

[안드로이드 코트린] SharedPreferences 간단한 데이터 저장하는 방법

이번 시간에는 앱에서 아이디, 패스워드를 한번 입력하면 나중에 들어왔을 때 정보가 사라지지 않는 방법을 알아보겠습니다. 목차 1. 실행 화면 2. 메인 화면 activity_main.xml 3. 메인 코드 MainA

aries574.tistory.com

2022.09.20 - [안드로이드] - [안드로이드 코틀린] 코드(MainActivity) 에서 배경 색상 바꾸는 다양한 방법

 

[안드로이드 코틀린] 코드(MainActivity) 에서 배경 색상 바꾸는 다양한 방법

이번 시간에는 코드(MainActivity)에서 텍스트뷰 색상을 다양하게 변경하는 방법을 알아보겠습니다. 목차 1. 실행 화면 2. 메인 화면  activity_main.xml 3. 메인 코드  MainActivity.kt 1. 실행 화..

aries574.tistory.com

2022.09.19 - [안드로이드] - [안드로이드 코틀린] RecyclerView 홀수 행, 짝수 행 별 색상 다르게 하는 방법

 

[안드로이드 코틀린] RecyclerView 홀수 행, 짝수 행 별 색상 다르게 하는 방법

이번 시간에는 리스트에 쓰이는 RecyclerView 화면에서 홀수 행, 짝수 행 별 색상 다르게 보여주는 방법 알아보겠습니다. 목차 1. 실행 화면 2. 아이템 화면 list_item.xml 3. 아이템 어댑터 ListAdapter

aries574.tistory.com

 

RecyclerView 다중 선택

 

반응형

관련글 더보기

댓글 영역