개발일기
[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) }
}
}
}