기록

androidStudio/kotliln/recyclerview 사용하기 본문

Moblie/Android

androidStudio/kotliln/recyclerview 사용하기

youngyin 2022. 3. 29. 17:03

개요

1. Gradle 라이브러리 추가
2. 리사이클러뷰에 연결할 객체 생성하기 [ Item Data Class 생성 ]
3. 리사이클러뷰 레이아웃 추가 [ recycler_layout.xml 추가 ]
4. 리사이클러뷰 어댑터 추가 [ MyAdapter.kt 추가 ]
5. 메인 프래그먼트에 리사이클러뷰 추가 [ MainFragment에 리사이클러뷰 초기화 코드, 레이아웃 추가 ]

1. build.gradle(:app) 

// recyclerview
    implementation "androidx.recyclerview:recyclerview:1.0.0"

2. add data model

data class Item(var title:String)

3. add recyclerview layout

3-1. recycler_layout.xml 작성

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

4. add recyclerview Adapter

class MyAdapter(private val context: Context) : 
	RecyclerView.Adapter<MyAdapter.ViewHolder>() {
    var dataset = mutableListOf<Item>()
    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): MyAdapter.ViewHolder {
        val view = LayoutInflater.from(context)
            .inflate(R.layout.recycler_layout, parent,false)
        return ViewHolder(view)
    }

    override fun getItemCount(): Int = dataset.size
    override fun onBindViewHolder(holder: MyAdapter.ViewHolder, position: Int) {
        holder.bind(dataset[position])
    }

    inner class ViewHolder(view: View) : RecyclerView.ViewHolder(view){
        private val tv_title:TextView = view.findViewById(R.id.tv_title)

        fun bind(item: Item){
            tv_title.text = item.title
        }
    }
}

5. MainFragment에 recyclerview 추가

5-1. MainFragment.kt 에 recyclerview 초기화 코드 작성

class MainFragment : Fragment() {
    lateinit var myAdapter: MyAdapter
    lateinit var root:View
    lateinit var recycler: RecyclerView

    val dataset = mutableListOf<Item>()

    override fun onCreateView(
        inflater: LayoutInflater, container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {
        root = inflater.inflate(R.layout.fragment_main, container, false)
        recycler = root.findViewById(R.id.recycler)
        myAdapter = MyAdapter(root.context)

        initRecycler()
        return root
    }

    private fun initRecycler(){
        recycler.adapter = myAdapter
        dataset.apply {
            add(Item("1"))
            add(Item("2"))
            add(Item("3"))

            myAdapter.dataset = dataset
            myAdapter.notifyDataSetChanged()
        }
    }
}

5-2. fragment_main.xml에 recyclerview 추가

<androidx.recyclerview.widget.RecyclerView
    android:id="@+id/recycler"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
    android:orientation="vertical"
    tools:listitem="@layout/recycler_layout"/>

결과

참고자료

 

RecyclerView로 동적 목록 만들기  |  Android 개발자  |  Android Developers

RecyclerView로 동적 목록 만들기   Android Jetpack의 구성요소 RecyclerView를 사용하면 대량의 데이터 세트를 효율적으로 표시할 수 있습니다. 개발자가 데이터를 제공하고 각 항목의 모양을 정의하면 R

developer.android.com

 

Comments