Stand up lee

[Kotlin] Recyclerview의 Adapter에서 Fragment로 데이터 전달 본문

개발일기

[Kotlin] Recyclerview의 Adapter에서 Fragment로 데이터 전달

tubeeee 2021. 9. 22. 23:29

 

Fragment 내에 List / Card를 표시할 Recyclerview가 있고,
그 Recyclerview를 다루는 Adapter가 있다.
Adapter에서 item를 뿌리고 그 item의 변화, (예를 들면 checkbox) 를 Fragment로 다시 전달하고싶다

 

1. Fragment에서 item의 변화 값을 처리하는 inner class 함수를 만든다

inner class onItemCheck(){
        fun onItemChecked(user: User, isChecked: Boolean) {
            if (requireActivity() is MainActivity) {
                val activity = (requireActivity() as MainActivity)
                activity.updateUser(user)
            }
        }
    }

 

2. Fragment에서 Adapter를 선언할 때 adapter에 필요한 값들과 위에서 선언한 함수랑 같이 넘겨준다

var link = onItemCheck()

val adapter = CardAdapter(this.requireContext(), list, link)

 

3. Adapter에서 다음과 같이 파라미터로 받아오고 필요한 부분에서 활용한다

class CardAdapter(context : Context, items : List<User>, var link : CardFragment.onItemCheck) :
        RecyclerView.Adapter<CardAdapter.MyViewHolder>() {
        
        
        override fun onBindViewHolder(holder: MyViewHolder, position: Int) {
        // - get element from your dataset at this position
        // - replace the contents of the view with that element

          val item: User = items.get(position)

          holder.itemchecked?.setOnCheckedChangeListener { _, isChecked ->
              item?.userChecked = if (isChecked) 1 else 0
              item?.let { link.onItemChecked(it, isChecked) }
          }
        
        }

 }