프래그먼트 내에 있는 리사이클러뷰에서 아이템을 선택했을시 선택된 아이템의 상세정보를 보여주고 싶음.

클릭시 데이터정보와 함께 상세정보 프래그먼트로 이동시켜야됨

 

https://velog.io/@appletorch/%EB%A6%AC%EC%82%AC%EC%9D%B4%ED%81%B4%EB%9F%AC%EB%B7%B0-%EC%95%84%EC%9D%B4%ED%85%9C-%ED%81%B4%EB%A6%AD-%EC%9D%B4%EB%B2%A4%ED%8A%B8

 

리사이클러뷰 아이템 클릭 이벤트

이전 글에선 리사이클러뷰를 기본 사용법과 예제를 살펴봤습니다. 이제 리사이클러뷰 아이템 클릭 이벤트를 처리하는 방법을 알아보겠습니다. 리스트뷰를 써본 경험이 있다면 리스트뷰의 아이

velog.io

아주 자세하게 잘 나와있음.

 

 

1.아답터 클래스에 먼저 커스텀 리스터 인터페이스, 저장변수와 함수 만듦

//custom listener
interface onItemClickListener {
    fun onItemClick(view : View, position: Int)
}
//객체 저장 변수
private lateinit var mOnItemClickListener: onItemClickListener
//객체 전달 메서드
fun setOnItemClickListener(onItemClickListener: onItemClickListener){
    mOnItemClickListener = onItemClickListener
}

 

2. 뷰홀더 클래스 안에서 커스텀 리스너 호출

inner class MyViewHolder (binding : RvItemActivitiesBinding) : RecyclerView.ViewHolder(binding.root){
    val title = binding.activitiesTitle


    // 아이템 클릭시 커스텀 리스너 이벤트 호출
    init{
        itemView.setOnClickListener {
            val pos = adapterPosition
            if (pos != RecyclerView.NO_POSITION && mOnItemClickListener != null){
                mOnItemClickListener.onItemClick(itemView,pos)

            }
        }
    }
}

 

3. fragment 에서 아답터 설정할때 아답터에 온클릭리스너 셋해줌

adapter = ActivitiesRvAdapter(runsList)
binding.activitiesRv.adapter = adapter

adapter.setOnItemClickListener(object : ActivitiesRvAdapter.onItemClickListener{
    override fun onItemClick(view: View, position: Int) {
        println("breakPoint : item clicked. pos : $position")
    }
})

 

아주 잘 나온걸 확인함.

 

온클릭 안에 프래그먼트를 이동시킬 코드 작성

override fun onItemClick(view: View, position: Int) {
    val transaction = requireActivity().supportFragmentManager.beginTransaction()
    transaction.replace(R.id.fragment_container,secondFragment())
    transaction.commit()
}

 

argument 와 같이 넘기고 싶으면

 

//넘길 arguments 를 fragment 로 저장
val bundle = Bundle()
bundle.putInt("position",position)
val singleFrag = ActivityFragment()
singleFrag.arguments = bundle

//fragment로 이동
val transaction = requireActivity().supportFragmentManager.beginTransaction()
transaction.replace(R.id.fragment_container,singleFrag)
transaction.addToBackStack(tag)
transaction.commit()

addToBackStack 은 넘어가는 프래그먼트에서 뒤로가기버튼을 눌렀을때 현재 리사이클러가 돌아가고 있는 프래그먼트로 다시 돌아오게 하도록 현재 프래그먼트를 스택에 추가하는것.

+ Recent posts