작성
·
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님께서 올려주신 문제에 대해 살펴보겠습니다.
문제를 이해하기 쉽게 분석해보자면, 현재 리사이클러뷰 어댑터에서 데이터 업데이트가 제대로 이루어지지 않고 있으며, 앱 실행 시 코인 리스트가 화면에 나타나지 않는다는 것입니다. 로그를 보면 데이터베이스 접근은 성공적으로 이루어졌으나, selectedCoinList
가 null
인 것을 확인할 수 있습니다.
먼저, getAllInterestCoinData
에서 데이터베이스로부터 데이터를 가져오는 방법을 살펴볼 필요가 있습니다.
coinList
가 Flow라면 asLiveData()
를 통해 LiveData로 효과적으로 변환할 수 있습니다. 하지만 문제가 생기는 부분은 coinList
에서 selectedCoinList
로 데이터를 전달하고 있는 부분인 것 같습니다.
asLiveData()
는 즉각적으로 값을 발행하지 않기 때문에 자신의 값을 selectedCoinList
에 저장하기 전에 초기화가 필요할 수 있습니다. 확인해봐야 할 것은, 이 과정에서 ViewModel의 데이터 흐름과 뷰가 적절히 설정되어 있는지입니다.
클릭시의 업데이트 문제는 뷰모델의 라인 업데이트가 RecyclerView 큐에 정확히 반영되지 않은 것으로 보입니다.
만약 어댑터를 새로고침하는 상황이라면, 리사이클러뷰에서 변경 사항을 감지하여 notifyDataSetChanged()
, notifyItemInserted()
, notifyItemRemoved()
, notifyItemRangeChanged()
등의 메소드를 적절히 사용해야 합니다.
지금의 문제를 해결하려면:
1. ViewModel과 리사이클러뷰 데이터바인딩 흐름을 다시 확인하시고,
2. Flow -> LiveData의 변환 과정과 이 과정에서 데이터가 적절히 연결되는지 디버깅해보셔야 합니다.
이 외에도 코드를 통해 발견되는 부분을 한 번 더 점검해보시면 좋겠습니다.
더 궁금한 점이나 문제가 있다면 언제든지 질문해 주세요!
성공적인 해결을 기원하겠습니다. 😊