Android/JETPACK

[JETPACK개론] View,DataBinding + Adapter

쏭식 2022. 8. 10. 23:59

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] RecyclerView (2)

1. HomeFragment에 RecyclerView를 추가한다! 2. 리싸이클러뷰에 보일 아이템들의 뷰 레이아웃을 구성한다! -> item_album.xml 3. 아이템 뷰 객체들에 들어갈 데이터리스트 생성 -> Album 데이터 클래스 생성.

ssongcode.tistory.com

 

 

GitHub - SsongSik/JetPack_Android_Practice: Android practice using the Jetpack library

Android practice using the Jetpack library. Contribute to SsongSik/JetPack_Android_Practice development by creating an account on GitHub.

github.com