강의

멘토링

로드맵

Inflearn brand logo image

인프런 커뮤니티 질문&답변

hagarakyo님의 프로필 이미지
hagarakyo

작성한 질문수

리사이클뷰 어댑터 업데이트가 안됩니다.

작성

·

21

·

수정됨

0

git: https://github.com/jikim0907/kotlin_practice

first commit 에 올려두었는데

관심있는 코인 클릭할 때 바로바로 업데이트가 안 되는 것 같습니다.

notifyItemRangeChanged같이 노티를 줘야하는지

어댑터를 새로 등록하는 거라서 안 해도 될 것 같은데 ...

클릭시 DB에 selected true false 값은 제때 반영이 됩니다.

 

 

(+ 일단 앱 실행시 코인리스트 보이는 화면에서부터 아무것도 뜨지 않아요

mainVIewModel에서

fun getAllInterestCoinData() = viewModelScope.launch { //DB랑 접근해서 데이터 가져오ㄴ는 것도 viewModel에서 호출하도록 함
        //1. viewModel에서 레포에 있는 함수 호출 2. 레포 통해서 DB로 접근해서 데이터 가져옴
        val coinList = dbRepository.getAllInterestCoinData()
//        val coinList = dbRepository.getAllInterestCoinData().asLiveData()
        Timber.d("coinList :::  "+coinList.toString())
        selectedCoinList = coinList.asLiveData()
        Timber.d("selectedCoinList :::  "+selectedCoinList.value.toString())
    }

로그를 찍어보았는데,, fragment 처음 onViewCreate될 때 DB불러오는 것 같은데
2025-03-04 23:07:15.546 12902-12902 IntroViewM...kFirstFlag com.mecoj.coco D true

2025-03-04 23:07:15.796 12902-12902 MainViewMo...stCoinData com.mecoj.coco D coinList ::: kotlinx.coroutines.flow.SafeFlow@1ea2ddb

2025-03-04 23:07:15.802 12902-12902 MainViewMo...stCoinData com.mecoj.coco D selectedCoinList ::: null

2025-03-04 23:07:15.803 12902-12902 CoinListFragment com.mecoj.coco D setSelectListRV ::: []

빈 리스트로 나오네요,,,, 도움좀 ,,,, 주시면 감사하겠습니다 ㅠㅠ

답변 1

0

안녕하세요, 인프런 AI 인턴입니다.
hagarakyo님께서 올려주신 문제에 대해 살펴보겠습니다.

문제를 이해하기 쉽게 분석해보자면, 현재 리사이클러뷰 어댑터에서 데이터 업데이트가 제대로 이루어지지 않고 있으며, 앱 실행 시 코인 리스트가 화면에 나타나지 않는다는 것입니다. 로그를 보면 데이터베이스 접근은 성공적으로 이루어졌으나, selectedCoinListnull인 것을 확인할 수 있습니다.

  • 먼저, getAllInterestCoinData에서 데이터베이스로부터 데이터를 가져오는 방법을 살펴볼 필요가 있습니다.
    coinList가 Flow라면 asLiveData()를 통해 LiveData로 효과적으로 변환할 수 있습니다. 하지만 문제가 생기는 부분은 coinList에서 selectedCoinList로 데이터를 전달하고 있는 부분인 것 같습니다.
    asLiveData()는 즉각적으로 값을 발행하지 않기 때문에 자신의 값을 selectedCoinList에 저장하기 전에 초기화가 필요할 수 있습니다. 확인해봐야 할 것은, 이 과정에서 ViewModel의 데이터 흐름과 뷰가 적절히 설정되어 있는지입니다.

  • 클릭시의 업데이트 문제는 뷰모델의 라인 업데이트가 RecyclerView 큐에 정확히 반영되지 않은 것으로 보입니다.
    만약 어댑터를 새로고침하는 상황이라면, 리사이클러뷰에서 변경 사항을 감지하여 notifyDataSetChanged(), notifyItemInserted(), notifyItemRemoved(), notifyItemRangeChanged() 등의 메소드를 적절히 사용해야 합니다.

지금의 문제를 해결하려면:
1. ViewModel과 리사이클러뷰 데이터바인딩 흐름을 다시 확인하시고,
2. Flow -> LiveData의 변환 과정과 이 과정에서 데이터가 적절히 연결되는지 디버깅해보셔야 합니다.

이 외에도 코드를 통해 발견되는 부분을 한 번 더 점검해보시면 좋겠습니다.
더 궁금한 점이나 문제가 있다면 언제든지 질문해 주세요!
성공적인 해결을 기원하겠습니다. 😊

관련 자료 링크 - Spring Data JPA 정의 방법
Nullsafety 관련 자료 (Kotlin)

hagarakyo님의 프로필 이미지
hagarakyo

작성한 질문수

질문하기