참고: https://sunpil.tistory.com/181 , 인프런 강의(mango_contents편)
class RVAdapter(val context: Context, val List: MutableList<ContentsModel>) :
RecyclerView.Adapter<RVAdapter.ViewHolder>() {
/*생략*/
//1.클릭 인터페이스 정의
interface ItemClick {
fun onClick(view: View, position: Int)
}
//클릭 리스너 선언
var itemClick: ItemClick? = null
override fun onBindViewHolder(holder: RVAdapter.ViewHolder, position: Int) {
if (itemClick != null) {
holder?.itemView.setOnClickListener { v ->
//2.아이템 클릭시 onClick 함수 실행됨
itemClick!!.onClick(v, position)
}
}
holder.bindItems(List[position])
}
/*생략*/
}
1. 클릭 인터페이스(ItemClick)를 정의해준다.
2. item을 클릭했을 때 ItemClick 인터페이스 안의 onClick 함수(추상함수)가 실행되도록 한다. (itemView.setOnClickListener 이용해 구현)
(3. onClick 함수(추상함수)의 구현은 MainActivity에서 해준다.)
val recyclerview = findViewById<RecyclerView>(R.id.rv)
val rvAdapter = RVAdapter(baseContext, items)
//3. 인터페이스 구현
//object를 이용해서 인터페이스 객체 생성
rvAdapter.itemClick = object: RVAdapter.ItemClick{
override fun onClick(view: View, position: Int) {
val intent = Intent(baseContext, ViewActivity::class.java)
intent.putExtra("url", items[position].url)
startActivity(intent)
}
}
3. onClick 함수(추상함수)의 구현은 MainActivity에서 해준다.
(+참고)리사이클러뷰 아이템 클릭해서 인텐트로 값 넘겨주기
adapter에서 클릭리스너 구현해주는 방식