[kotlin] 코틀린 데이터 바인딩을 사용하여 리사이클러뷰를 구현하는 방법

코틀린에서 데이터 바인딩을 사용하여 리사이클러뷰를 구현하는 것은 안드로이드 앱의 UI를 개발하는 데 유용한 방법 중 하나입니다. 데이터 바인딩을 사용하면 XML 파일에서 뷰와 데이터 모델을 쉽게 연결할 수 있으며, 컴파일 시에 바인딩된 클래스를 생성하여 코드에서 뷰에 접근하는 데 필요한 보일러플레이트 코드를 제거할 수 있습니다.

코틀린 데이터 바인딩 설정

코틀린 데이터 바인딩을 사용하려면 먼저 모듈 수준의 build.gradle 파일에 다음과 같은 의존성을 추가해야 합니다.

android {
    ...
    buildFeatures {
        dataBinding true
    }
}

dependencies {
    ...
    implementation "androidx.databinding:dataBinder:1.0-rc4"
}

그런 다음, XML 파일 안에서 데이터 바인딩을 활성화하기 위해 레이아웃 최상위 요소에 다음과 같은 코드를 추가해야 합니다.

<layout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">

    <data>
        <variable
            name="viewModel"
            type="com.example.MyViewModel" />
    </data>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">

        <!-- 여기에 데이터 바인딩된 뷰 요소 추가 -->

    </LinearLayout>
</layout>

리사이클러뷰 구현

이제 데이터 바인딩을 사용하여 리사이클러뷰를 구현할 차례입니다.

어댑터 클래스 생성

import android.view.LayoutInflater
import android.view.ViewGroup
import androidx.recyclerview.widget.RecyclerView
import com.example.databinding.databinding.ItemExampleBinding

class MyAdapter(private val items: List<String>) : RecyclerView.Adapter<MyAdapter.ViewHolder>() {

    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
        val binding = ItemExampleBinding.inflate(LayoutInflater.from(parent.context), parent, false)
        return ViewHolder(binding)
    }

    override fun onBindViewHolder(holder: ViewHolder, position: Int) {
        val item = items[position]
        holder.bind(item)
    }

    override fun getItemCount(): Int {
        return items.size
    }

    class ViewHolder(private val binding: ItemExampleBinding) : RecyclerView.ViewHolder(binding.root) {
        fun bind(item: String) {
            binding.item = item
            binding.executePendingBindings()
        }
    }
}

XML 레이아웃에 리사이클러뷰 추가

<androidx.recyclerview.widget.RecyclerView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    app:adapter="@{viewModel.adapter}" />

액티비티 또는 프래그먼트에서 어댑터 설정

class MyFragment : Fragment() {

    private lateinit var binding: FragmentMyBinding
    private val viewModel: MyViewModel by viewModels()

    override fun onCreateView(
        inflater: LayoutInflater, container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View {
        binding = FragmentMyBinding.inflate(inflater, container, false)
        binding.lifecycleOwner = viewLifecycleOwner
        binding.viewModel = viewModel

        binding.myRecyclerView.adapter = MyAdapter(viewModel.items)

        return binding.root
    }
}

이제 코틀린 데이터 바인딩을 사용하여 리사이클러뷰를 구현하는 방법을 알게 되었습니다. 데이터 바인딩을 사용하면 리사이클러뷰의 뷰 홀더와 XML 파일을 연결하고, 반복되는 코드를 줄일 수 있으며, 효율적인 UI 개발을 할 수 있습니다.