상세 컨텐츠

본문 제목

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

안드로이드

by aries574 2022. 9. 19. 15:22

본문


이번 시간에는 리스트에 쓰이는 RecyclerView 화면에서 홀수 행, 짝수 행 별 색상 다르게 보여주는 방법 알아보겠습니다.


목차

1. 실행 화면
2. 아이템 화면 list_item.xml
3. 아이템 어댑터 ListAdapter.kt
4. 메인 화면  activity_main.xml
5. 메인 코드  MainActivity.kt


1. 실행 화면

 

2. 아이템 화면 list_item.xml

- 설명 -

 1. 아이템 보여주는 화면  

 2. 간단한 데이터 보여주는 TextView

<?xml version="1.0" encoding="utf-8"?>
<androidx.cardview.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_marginHorizontal="10dp"
    android:layout_marginVertical="10dp"
    android:orientation="vertical">

    <LinearLayout
        android:id="@+id/layout"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <TextView
            android:id="@+id/item_text"
            android:layout_width="match_parent"
            android:layout_height="50dp"
            android:layout_marginStart="5dp"
            android:gravity="center_vertical"
            android:textColor="@android:color/white"
            android:textSize="20sp"
            android:textStyle="bold" />
    </LinearLayout>

</androidx.cardview.widget.CardView>


3. 아이템 어댑터 ListAdapter.kt

 - 설명 -

 1. 아이템 화면과 데이터를 연결해주는 어댑터 클래스

 2. constructor(context: Context)

   생성자에 Context 매개변수 추가

   색상을 변경하기 위해 Context가 필요함

 3. onCreateViewHolder

   화면 설정 함수

 4. onBindViewHolder

   데이터 설정 함수

 5. holder.layout.setBackgroundColor

   위치에 따라 배경색상 변경

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

    lateinit var context: Context

    var itemList: ArrayList<String> = ArrayList()

    constructor(context: Context): this(){

        this.context = context
    }

    /**
     * 화면 설정
     */
    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder {

        val inflater: LayoutInflater = 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) {

        //데이터 넣기
        holder.itemText.text = itemList[position]

        //위치에 따른 홀수, 짝수행 색상 변경
        if(position % 2 == 1){ //홀수행

            holder.layout.setBackgroundColor(ContextCompat.getColor(context,
                android.R.color.holo_green_dark))

        }else{//짝수행
            holder.layout.setBackgroundColor(ContextCompat.getColor(context,
                android.R.color.holo_green_light))
        }
    }

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

    /**
     * 아이템 추가
     */
    fun addItem(item: String){

        itemList.add(item)
    }

    class ItemViewHolder(view: View): RecyclerView.ViewHolder(view){

        //객체 생성
        val layout: LinearLayout = view.findViewById(R.id.layout)
        val itemText: TextView = view.findViewById(R.id.item_text)
    }
}

 


4. 메인 화면  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"
    tools:context=".MainActivity">

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

</LinearLayout>


5. 메인 코드  MainActivity.kt

- 설명 -

 1. ListAdapter(this)

   어댑터에 Context 전달

 2. recyclerView.adapter = adapter

   RecyclerView Adapter 적용

 3. sampleData

   샘플 데이터 생성

class MainActivity : AppCompatActivity() {

    lateinit var adapter: ListAdapter

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

        //recyclerView 설정
        val recyclerView: RecyclerView = findViewById(R.id.recyclerView)
        recyclerView.layoutManager = LinearLayoutManager(this)

        //Adapter 설정
        adapter = ListAdapter(this)

        //Adapter 적용
        recyclerView.adapter = adapter

        //샘플데이터 생성
        sampleData()
    }//onCreate()

    fun sampleData(){

        //반복( 0 ~ 20 )
        for(i in 0..20){
            //어댑터에 데이터 추가
            adapter.addItem("Item $i")
        }
        //적용
        adapter.notifyDataSetChanged()
    }
}

2022.09.14 - [안드로이드] - [안드로이드 코틀린] SQLite ToDo List 만드는 방법 part1 - Data 클래스와 DB 클래스

 

[안드로이드 코틀린] SQLite ToDo List 만드는 방법 part1 - Data 클래스와 DB 클래스

이번 시간에는 ToDo List 만들기 첫 번째 시간 Data 클래스와 DB 클래스를 만들어 보겠습니다. 목차 1. 라이브러리 등록 2. ToDo 클래스 ToDoModel.kt 3. ToDo DB 클래스 ToDoDB.kt 1. 라이브러리 등..

aries574.tistory.com

2022.09.13 - [안드로이드] - [안드로이드 코틀린] 액티비티(Activity) 뒤로가기 버튼 만드는 방법

 

[안드로이드 코틀린] 액티비티(Activity) 뒤로가기 버튼 만드는 방법

이번 시간에는 액티비티(Activity) 이동 후에 다시 이전 화면으로 돌아가는 방법을 알아보겠습니다. 목차 1. 실행 화면 2. 액티비티 만들기 3. 환경 설정 파일 AndroidManifest.xml 4. 메인 화면 acti

aries574.tistory.com

 

2022.08.11 - [안드로이드] - [안드로이드 코틀린 ] RecyclerView Item Animation 서서히 나타나는 효과 주는 방법 part1

 

[안드로이드 코틀린 ] RecyclerView Item Animation 서서히 나타나는 효과 주는 방법 part1

recyclerView에 애니메이션 기능을 적용해서 서서히 리스트가 보이는 방법을 알아보겠습니다. 이번 시간에는 리스트에 보여지는 아이템 관련 화면과 기능을 구현하겠습니다. 목차 1. 아이템 클래

aries574.tistory.com

 

 

반응형

관련글 더보기

댓글 영역