Flow를 사용하고 계시네요. Flow를 여러개 사용하는데 서로 간에 의존성이 있다면 flow를 합쳐주셔야 합니다. 위처럼 하시면 flow를 collect 하긴 하는데 adapter 에 제대로 반영이 안될겁니다. 따라서
booksViewModel.getNewBookList(100).collect {
books.addAll(it)
mainBookListAdapter.submitList(books)
}
booksViewModel.getNewBookList(200).collect {
books.addAll(it)
mainBookListAdapter.submitList(books)
}
booksViewModel.getRecommendBookList().collect {
books.addAll(it)
mainBookListAdapter.submitList(books)
}
처럼, 데이터가 변경될 때마다 submitList를 호출해야 하지만, 이렇게 되면 비효율적이 되므로 flow에서 제공하는 zip, merge, combine 등의 오퍼레이터 중에 적합한 것을 사용하세요.
https://kt.academy/article/cc-flow-combine
그리고 combine하는 작업은 뷰모델에서 하고 그 결과만 뷰에서 처리하시면 될 것 같습니다.
combine을 사용한다면 아래처럼 합치시면 되겠죠.
val newBooksFlow1 = getNewBookList(100)
val newBooksFlow2 = getNewBookList(200)
val recommendBooksFlow = getRecommendBookList()
newBooksFlow1.combine(newBooksFlow2, recommendBooksFlow) { newBooks1, newBooks2, recommendedBooks ->
newBooks1.plus(newBooks2).plus(recommendedBooks)
}