ViewBinding + Adapter
view(Acitivty, Fragment)뿐만 아니라 Adapter에서도 ViewBinding을 사용할 수 있다.
먼저, Adapter를 사용하는 리사이클러뷰를 준비하자!
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/rv"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
class CustomViewAdapter (private val dataSet : ArrayList<String>) : RecyclerView.Adapter<CustomViewAdapter.ViewHolder>(){
class ViewHolder(binding : TextRowItemBinding) : RecyclerView.ViewHolder(binding.root){
val myText : TextView = binding.myText
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int):ViewHolder {
val view = TextRowItemBinding.inflate(LayoutInflater.from(parent.context), parent, false)
return ViewHolder(view)
}
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
holder.myText.text = dataSet[position]
}
override fun getItemCount(): Int {
return dataSet.size
}
}
ViewHolder라는 inner class에서 ViewBinding을 통해 리사이클러뷰의 아이템을 binding해주어, 해당 데이터를 text에 넣어준다.
array.add("a")
array.add("b")
array.add("c")
val customViewAdapter = CustomViewAdapter(array)
val rv = binding.rv
rv.adapter = customViewAdapter
rv.layoutManager = LinearLayoutManager(this)
리사이클러뷰에 해당 데이터들이 잘 들어간 것을 확인할 수 있다.
또한, View에서 ViewBinding, DataBinding 둘 다 사용했던 것처럼
Adapter에서도 DataBinding을 사용할 수 있다.
DataBinding + Adapter
Adapter에서 onCreateViewHolder부분에서 DataBinding으로 바꾸어주기만 하면 된다!!
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int):ViewHolder {
//val view = TextRowItemBinding.inflate(LayoutInflater.from(parent.context), parent, false)
val view = DataBindingUtil.inflate<TextRowItemBinding>(LayoutInflater.from(parent.context), R.layout.text_row_item, parent, false)
return ViewHolder(view)
}
리사이클러뷰를 생성하는 부분이 궁금하시다면 여기루!!
'Android > JETPACK' 카테고리의 다른 글
[JETPACK개론] Activity/Fragment 의 ViewModel 공유 (0) | 2022.08.12 |
---|---|
[JETPACK개론] ViewModel ? (0) | 2022.08.11 |
[JETPACK개론] DataBinding 과 data class (0) | 2022.07.26 |
[JETPACK개론] ViewBinding (0) | 2022.07.24 |
[JETPACK개론] 들어가며 (0) | 2022.07.23 |