본문 바로가기
SW Programming/Android

안드로이드 recyclerView 내부 영역 클릭 강제로 발생시키기(feat.chatGPT)

by Crystal.k 2023. 2. 21.

참고한 글

RecyclerView 를 프로그램적으로 클릭(강제클릭)이 가능한가요?

 

RecyclerView 를 프로그램적으로 클릭(강제클릭)이 가능한가요?

RecyclerView 를 적용하고 있습니다. 현재 막히는 부분은 특정 이벤트 후에 다음 Item 으로 강제로 클릭하는 onClick 이벤트가 발생했으면 하는것입니다.구글링 하다보니 stackoverflow 에 아래와 같은 방

qna.programmers.co.kr


 

요즘 핫한 Chat GPT 에게도  물어봤다.

Q: 안드로이드에 recycler view에서 클릭을 강제로 발생시키고싶어

A: 안드로이드에서 RecyclerView에서 클릭을 강제로 발생시키려면 다음과 같이 코드를 작성할 수 있습니다.

  1. RecyclerView의 position으로 아이템 뷰를 가져옵니다.
  2. 아이템 뷰에서 클릭 리스너를 가져옵니다.
  3. 클릭 리스너의 onClick() 메소드를 호출합니다.

다음은 이에 대한 코드 예시입니다.

val position = 0 // 강제로 클릭할 아이템의 위치
val recyclerView = findViewById<RecyclerView>(R.id.recycler_view)
val itemView = recyclerView.layoutManager?.findViewByPosition(position)
if (itemView != null) {
    itemView.performClick() // 아이템 뷰에서 클릭 이벤트 발생
} else {
    recyclerView.layoutManager?.scrollToPosition(position)
    recyclerView.addOnScrollListener(object : RecyclerView.OnScrollListener() {
        override fun onScrolled(recyclerView: RecyclerView, dx: Int, dy: Int) {
            super.onScrolled(recyclerView, dx, dy)
            val itemView = recyclerView.layoutManager?.findViewByPosition(position)
            if (itemView != null) {
                itemView.performClick() // 아이템 뷰에서 클릭 이벤트 발생
                recyclerView.removeOnScrollListener(this)
            }
        }
    })
}​

이 코드는 강제로 클릭할 위치(position)의 아이템 뷰를 가져오고, 해당 아이템 뷰에서 클릭 리스너를 찾아 onClick() 메소드를 호출합니다. 그러나 만약 해당 위치에 아이템 뷰가 없다면 RecyclerView를 스크롤해서 해당 위치에 아이템 뷰가 나타날 때까지 기다린 후 클릭을 수행합니다.

 

친절하네요...^.^ 

 

 

# 현실

그런데 말입니다....
특정 데이터를 찾아서 눌러야해서 우선 listAdapter 를 통해서 클릭하고자하는 인덱스를 찾아냈습니다.

그리고 아쉽게도 발생시키고 싶은 클릭 리스너가 뷰홀더 전체가 아니라 뷰홀더 내부에 있는 특정 layout에 클릭이벤트를 적용해놔서 아래처럼 처리했습니다.

val index = listAdapter!!.list.indexOfFirst { data -> data.name == "찾고자하는 데이터 이름" }

val viewHolder = binding.rvList.findViewHolderForAdapterPosition(index)!! as FilterAdapter.FilterViewHolder
            viewHolder.binding!!.layoutFilter.callOnClick()

 

생각보다 유용했다 chat GPT...! 

 

반응형

댓글