코틀린으로 작성한 안드로이드 Recycler view adpater에 데이터 바인딩 접목하기
오늘은 안드로이드에서 코틀린으로 Recycler view를 데이터 바인딩으로 사용하는 방식을 서술하려 합니다.
adapter
class RecyclerViewAdapter(context : Context, dataSet:ArrayList<String>) : RecyclerView.Adapter<RecyclerView.ViewHolder>() {
lateinit var itemBinding:ViewListItemBinding
override fun onCreateViewHolder(p0: ViewGroup, p1: Int): RecyclerView.ViewHolder {
val layoutInflater = LayoutInflater.from(p0.context)
itemBinding = DataBindingUtil.inflate(layoutInflater,R.layout.view_list_item, p0, false)
return ViewHolder(itemBinding.root.rootView)
}
onCreateViewHolder 메소드를 오버라이드해줍니다.
RecyclerView의 ViewHolder 클래스 타입을 반환하는 메소드이며, DataBindingUtil으로 데이터 바인딩을 구현할 수 있습니다.
override fun onBindViewHolder(p0: RecyclerView.ViewHolder, p1: Int) {
val holder: ViewHolder = p0 as ViewHolder
if (0 <= p1 && p1 < dataSet.size) {
val data = dataSet[p1]
holder.bind(data)
}
}
override fun getItemCount(): Int {
return dataSet.size
}
onBindViewHolder 메소드로 데이터와 ViewHolder를 엮어주고, getItemCount 메소드로 데이터의 갯수를 반환해줍니다.
private inner class ViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
fun bind(data: String) {
itemBinding.enterText.text= data
}
}
}
inner class로 ViewHolder를 만들어주어 뷰와 데이터를 맵핑해줍니다.
activity
val userArray = ArrayList<String>()
array.add("1")
array.add("2")
array.add("3")
recyclerView(userArray)
private fun recyclerView(userArray: ArrayList<String>) {
bind.mRecyclerView.layoutManager = LinearLayoutManager(activity)
adapter = RecyclerViewAdapter(activity!!.applicationContext, array)
bind.mRecyclerView.adapter = adapter
bind.mRecyclerView.setHasFixedSize(true)
}
평소와 같이 layoutManager도 설정하고, 구현한 RecyclerViewAdapter도 객체로 만들어서 RecyclerView에 넣어줍니다.
activity!!.applicationContext는 이 코드가 사용된 곳이 fragment라서 쓰인 코드이므로, 일반적인 activity라면 바로 context를 불러오면 됩니다.
binding adapter
<data>
<import type="android.view.View"/>
<variable
name="text"
type="android.databinding.ObservableField<String>"/>
</data>
이 글에 자세히 설명되진 않았지만, recycler view에도 바인딩 어댑터를 사용할 수 있습니다.
Written on August 8, 2018