[개념] 리스트뷰와 리사이클러뷰에서 ViewHolder 패턴 활용

2. RecyclerView 에서의 ViewHolder

RecyclerView.Adapter 를 상속하여 어댑터를 만들 때, RecyclerAdapter에서 구현해야 할 함수들은 onCreateViewHolder, onBindViewHolder, getItemCount, ViewHolder 입니다.

RecyclerAdapter 코드

class RecyclerAdapter(private val items: ArrayList<Model>) :
    RecyclerView.Adapter<RecyclerAdapter.ViewHolder>() {

    class ViewHolder(v: View) : RecyclerView.ViewHolder(v) {
    	fun bind(listener: View.OnClickListener, item: Model) {
    	}
    }
    
    override fun getItemCount() = items.size

    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerAdapter.ViewHolder {
    	val View = LayoutInflater.from(parent.context).inflate(R.layout.board_list, parent, false)
    	return RecyclerAdapter.ViewHolder(View)
    }
    
    override fun onBindViewHolder(holder: RecyclerAdapter.ViewHolder, position: Int) {
        val item = items[position]
    	val listener = View.OnClickListener {it ->
        	Toast.makeText(it.context, "Clicked: ${item.title}", Toast.LENGTH_SHORT).show()
    	}
    	holder.apply {
        	bind(listener, item)
        	itemView.tag = item
    	}
    }
}

ViewHolder:

getItemCount: 보여줄 리스트 몇 개인지 알려줍니다

onCreateViewHolder : ViewHolder를 새로 만들 때 호출되는 메서드로, 이를 통해 각 아이템을 위한 XML 레이아웃을 활용한 뷰 객체를 생성하고 이를 뷰 홀더 객체에 담아 리턴 합니다. ViewHolder 가 아직 어떠한 데이터에 바인딩된 상태가 아니기 때문에 각 뷰의 내용 (TextView 의 Text 등)은 없습니다.

onBindViewHolder: 생성된 View에 보여줄 데이터를 설정 때 호출되는 메서드입니다. position 이라는 파라미터를 활용하여 데이터의 위치(index값)에 맞게 아이템 레이아웃을 바인딩해줄 수 있다.

4. reference

https://developer.android.com/guide/topics/ui/layout/recyclerview
https://developer.android.com/guide/topics/ui/layout/recyclerview-custom

좋은 웹페이지 즐겨찾기