[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 개발을 할 수 있습니다.