inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

냉동코더의 알기 쉬운 Modern Android Development 입문

리사이클러뷰 아이템 클릭 관련해서 질문이 있습니다!

423

juneeeiii

작성한 질문수 7

0

리사이클러뷰 아이템에서 클릭했을 때

override fun onBindViewHolder(holder: BookSearchViewGridHolder, position: Int) {
    val book = currentList[position]
    holder.bind(book)
    holder.itemView.setOnClickListener {
        onItemClickListener?.let{ it(book) }
    }
}

private var onItemClickListener : ((Book) -> Unit)? = null
fun setOnItemClickListener(listener : (Book) -> Unit){
    onItemClickListener = listener
}

강의대로 위와 같이 해주었습니다.

다만 아이템안의 특정요소, 예를 들어 각 아이템에서 사진을 클릭했을 때 특정 로직을 실행하고 싶을 때 그러한 경우는 어떤식으로 코드를 짜야할지 궁금합니다!

아이템에서 사진을 클릭했을 때 프래그먼트에서 특정로직을 실행하고 싶습니다!!

jetpack architecture android kotlin

답변 2

0

냉동코더

Viewmodel의 생명주기는 일반적으로 viewholder보다 길기 때문에 viewholder가 viewmodel을 참조하는 동작을 만드는 것은 추천되지 않습니다. 근본적으로 뷰홀더가 뷰모델을 직접 사용하지 않도록 앱 구조를 다시 생각하시는 것이 좋을 것 같습니다.

https://stackoverflow.com/questions/61364874/view-models-for-recyclerview-items

https://stackoverflow.com/questions/69424393/how-to-use-viewmodel-in-recyclerview-adapter

그래도 뷰홀더를 클릭했을때 동작을 만들고 싶으시면 콜백으로 전달하는 구조가 추천됩니다. 뷰홀더 내부 컴포넌트에 대한 클릭에 콜백을 붙이는 방법은 다음 링크를 참조해 보세요. 여러가지 힌트를 드렸으니 이 이상은 스스로 궁리해 보세요 :)

https://www.geeksforgeeks.org/kotlin-lambda-functions-for-recyclerview-adapter-callbacks-in-android/

0

냉동코더

그럴 경우엔 클릭리스너를 뷰홀더 내부에 달아 사용하는게 좋을 것 같네요. 클릭리스너를 뷰홀더 내부에서 구현한 제 블로그 포스팅을 참고해 보시기 바랍니다.

https://cliearl.github.io/posts/android/recyclerview-listadapter/

0

juneeeiii

뷰홀더 내부에서 사용하는 것 까지는 알고있습니다!! 하지만, 위의 코드처럼 프래그먼트에서 프래그먼트로 이동하는 등,

뷰홀더 내부에서 클릭이 이루어졌을 때 서버와 통신이 이루어져야 합니다!!

따라서 뷰홀더내부에서 클릭이 이루어졌을 때 해당 프래그먼트에서 -> ViewModel로 -> Repository로 가서 서버와 통신을 하고 싶습니다.!! 다만 뷰홀더내부에는 viewModel을 생성할 수도 없고, 프래그먼트에서 viewHolder를 생성할 수도 없을 것 같아서요!!

뷰홀더 내부에서 클릭이 이루어졌을 때 프래그먼트로 돌아와 서버와 통신을 하고 싶습니다!

Coroutine, Flow 질문

0

401

1

Transformations import 안됨

0

588

1

moshi관련 질문입니다.

0

566

2

searchBooks() 에서 북 검색 입력을 너무 빨리 할 경우 마지막 글자로 검색이 안돼요.

0

375

1

안드로이드에서 아키텍처 패턴

0

423

1

RecyclerView.Adapter vs ListAdpater

0

473

1

Flows 와 Coroutine

1

572

1

[BookSearchAdapter] onBindViewHolder의 currentList[position] 질문

0

370

1

코루틴 메모리 관련해서 질문드립니다!

0

456

1

Java Bill Pugh Solution 에서 INSTANCE

0

469

1

nested json에서 특정 부분만 파싱하는법

0

495

1

Fragment에서의 viewBinding

0

525

3

toolbar 질문드립니다.

0

417

2

EditText 에서 delay 주셔서 처리하셨는데 flow 의 debounce() 하고 같은건가요?

2

568

1

코루틴 관련 질문

0

549

1

오류

1

494

2

강사님! 직렬화 라이브러리를 Moshi, kotlin serialization 두개를 사용하시던데 이유가 있으신가요?

1

749

1

EditText 는 kill 해도 값이 잘 저장되어있던데 혹시 제가 잘못테스트했을까요?

1

354

1

서버도 페이징 기능이 되는데 Paging 라이브러리가 필요할까요?

1

530

1

GSON 이 아닌 Moshi 를 사용하시는 이유가 있을까요?

1

1271

1

EditText 는 액티비티가 재생성되어도 값이 남아있던데 이유가 궁금해요

1

498

1

ViewModel 생성시 왜 초기값을 받지 않도록 했을까요?

1

438

1

Room DB에 id 항목 추가

0

255

1

안녕하세요. 용어에 대해 질문이 있어 글 남깁니다.

0

408

2